Xử lý string trong C++

#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;
	}


	

	system("pause");
	return 0;
}

Em đã viết được hàm cắt chuối trong string và lưu vào vector ,nhưng bây giờ em muốn xuất ra màn hình số lần xuất hiện của các string đã cắt ,xuất hiện trong trong xâu chính.nhưng không biết phải viết,thao tác như thế nào.A/c nào pro giúp em với.Em là dân ngoại,không phải là dân lập trình,nên có gì a/c thông cảm nếu em không biểu đạt đúng.
Ý tưởng của em không biết có đúng không,a/c tham khảo: em định xóa đi phần tử trùng nhau trong vector .sau đó so sánh SS[i] với xâu ban đầu,đưa ra biến đếm số lần xuất hiện.<mỗi tội làm mãi vẫn báo lỗi>hihi

Ờ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 SScounting 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;
}
1 Like

Em đang làm load 1 file tiếng anh dàii vào, code anh làm hình như đếm lỗi,.Giờ sửa nó ntn cho đúng với trường hợp file hay xâu dài ạ,Em thử nhưng không được,không biết sai ở đâu nữa.

Ý tưởng của mình thì split string đó ra mảng, mình có viết sẵn hàm util đấy , bạn xem rồi áp dụng:

1 Like

Thì bây giờ bạn sửa input đi, thành đọc từ file .txt.
Bạn xem thêm phần thao tác với tệp nhé:

1 Like

Em đã thao tác với tệp hành công file english.nhưng đém bị lỗi.em sd code anh page

Ý bạn là gì???

Mình nghĩ bị lỗi là do các dấu “.”, dấu “,” hay dấu ngoặc ()… vì các ký tự này liền với từ, chương trình sẽ nhận luôn nó vào thành chuỗi. ví dụ như câu trên có từ “em” và từ “em.”, hai chuỗi này khác nhau.
Bạn sửa chương trình để nó lọc những dấu này ra nhé.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?