Ờm… lần tới viết bài thì để yêu cầu của bài toán lên đầu nhé, rồi code bên dưới, cho dễ hiểu.
Chứ vào topic Xử lý string trong C++ .Please! rồi bên dưới độp cả đống code
, sợ lắm.
Quay lại với bài này, có phải ý của bạn là đếm số lần xuất hiện của từng chuỗi trong mảng (vector)?
Nếu đúng như vậy thì mình có mấy dòng code dưới đây.
//***********************************************************************//
vector <int> counting;
for (int i = 0; i < SS.size() - 1; i++) {
int count = 1;
for (int j = SS.size() - 1; j > i; j--)
if (SS[i] == SS[j]) {
count++;
SS.erase(SS.begin() + j);
}
counting.push_back(count);
}
if (SS.size() - counting.size()) counting.push_back(1);
cout << "\n---------------------\n";
for (int i = 0; i < SS.size(); i++) cout << SS[i] << '\t' << counting[i] << '\n';
//***********************************************************************//
Ý tưởng của mình sẽ dùng 2 vòng lặp, vòng ngoài chạy xuôi còn vòng trong chạy ngược lại, nếu gặp phần tử giống nhau thì sẽ xóa bỏ phần tử đó (erase) và đồng thời tăng biến đếm (count) lên 1 đơn vị.
Kết thúc một vòng lặp trong thì sẽ add biến đếm đó vào mảng counting luôn, nên vậy chỉ số của phần tử cần đếm và số lần xuất hiện trong 2 mảng SS và counting sẽ giống nhau, tiện cho việc hiển thị.
Chèn vào code của bạn:
#include <iostream>
#include <string>
#include <math.h>
#include <vector>
using namespace std;
int main()
{
int i, j, k;
vector<string>SS; //Vector of string
string Str = "I love you. anh yeu em. anh yeu em";
while (!Str.empty())
{
SS.push_back(Str.substr(0, Str.find(" ")));// add word to vector
if (Str.find(" ") > Str.size()) //Check if found " " (Space)
{
break;
}
else
{
Str.erase(0, Str.find(" ") + 1); // Update string
}
}
for (int i = 0; i < SS.size(); i++)
{
cout << SS[i] << endl;
}
//***********************************************************************//
vector <int> counting;
for (int i = 0; i < SS.size() - 1; i++) {
int count = 1;
for (int j = SS.size() - 1; j > i; j--)
if (SS[i] == SS[j]) {
count++;
SS.erase(SS.begin() + j);
}
counting.push_back(count);
}
if (SS.size() - counting.size()) counting.push_back(1);
cout << "\n---------------------\n";
for (int i = 0; i < SS.size(); i++) cout << SS[i] << '\t' << counting[i] << '\n';
//***********************************************************************//
// system("pause");
return 0;
}