Tìm số lượng từ có 5 kí tự trong mỗi chuỗi

Thầy mình có cho 1 đề như thế này :
Cho 1 file .txt chứa các chuỗi, mỗi chuỗi trên 1 dòng, đầu và cuối chuỗi không có khoảng trắng, giữa các từ có duy nhất 1 khoảng trắng. Mỗi chuỗi có tối đa 256 kí tự thường hoặc khoảng trắng. hãy đọc từ file và tìm số lượng các từ có 5 kí tự trên mỗi dòng.

ý tưởng của em là cho 1 mảng string và n là số lượng phần tử của mỗi string, ta sẽ duyệt từ string đầu đến string cuối và mỗi string sẽ reset lại biến đếm và tạo số lượng của chuỗi mới k và 1 mảng kí tự động s chứa số lượng phần tử của chuỗi mới đó nhưng đến phần điều kiện thì nó không đúng nên xin các các cao nhân chỉ giáo

int kiemtra(char s[])
{
	int dem = 0, n = strlen(s);
	for (int i = 0; i < n; i++)
	{
		if (s[i] != ' ')
			dem++;
	}
	if (dem == 5)
		return 1;
	return 0;
}

void dem_5_ki_tu(string a[], int n)
{
	int dem;
	char *s;
	for (int i = 0; i < n; i++)
	{
		dem = 0;
		int k = a[i].length();
		s = new char[k];
		for (int j = 0; j < k; j++)
		{
			if (s[j] == ' ' && s[j + 1] != ' ' && kiemtra(s) == 1)
			{
				dem++;
			}
		}
		cout << "\nSo luong tu co 5 ki tu cua dong " << i << " la: " << dem;
	}
}

1/ Method dem_5_ky_tu thì truyền n để làm gì?
Method này chỉ cần nhận vào 1 string, và cái string này đã phải thoả condition là 2 đầu ko có space rồi, việc còn lại của method chỉ là đi đếm số word trong string thoả == 5 characters mà thôi.
Lúc này trong method chỉ cần 1 variable charCount và 1 variable wordCount, bắt đầu loop từng character thì charCount++ và khi character == ’ ’ thì check charCount == 5 ? wordCount ++ : charCount = 0.
Khi hết loop sẽ return wordCount là xong.
Đây là case số 1, còn 1 case nữa Mỗi chuỗi có tối đa 256 kí tự thường hoặc khoảng trắng.
Nhưng do condition là đầu và cuối chuỗi không có khoảng trắng, giữa các từ có duy nhất 1 khoảng trắng => chỉ có thể là đây là 1 row chứa toàn space, thì đem cái check condition này lên trên đầu method dem_5_ky_tu, ngay lần loop đầu tiên nếu character == ’ ’ return 0 => tức là row này ko có word nào cả, nhảy sang row next.

4 Likes

tại vì mình đang xét nhiều chuỗi mà có xuống dòng nên phải tạo 1 cái mảng string có số lượng phần tử n vì nếu dùng mảng kí tự 2 chiều sẽ rất rối

Bạn tự làm khổ mình khi tách từng dòng thành chuỗi riêng biệt. Chỉ cần 1 chuỗi liên tiếp cũng được rồi.

Ngay sau đó dùng s một cách vô nghĩa khi chưa biết chuỗi s chứa cái gì trong đó.

3 Likes

à hiểu rồi bạn muốn nói là mình chỉ cần xử lí 1 chuỗi sau đó gọi lại hàm vừa xử lí trong vòng lập là được, cảm ơn bạn

bạn nói đúng rồi mình chỉ cần 1 chuỗi thôi, ko cần tạo mảng kí tự gì cả

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