Hỏi về tìm từ có độ dài lớn nhất trong một chuỗi ký tự

Mọi người cho em hỏi vì sao hàm check(s[100]) của em không chạy mà nó lại ra như hình ạ,đây là đoạn code của em http://codepad.org/uAHhjEMS
.


Ngoài ra em thấy dùng hàm strtok(s,‘khoảng cách’) trong string để làm bài này với ý tưởng là sẽ tách được từng ký tự rồi dùng strlen để đo độ dài nhưng em thấy rối ở phần gán vẫn chưa biết phải làm sao cho đúng. Em cảm ơn sự giúp đỡ của mọi người ạ.

#include<stdio.h>
#include<math.h>
#include<string.h>

void input(char s[100])                              //hàm nhập chuỗi
{
	printf("Nhap chuoi s\n");
	gets(s);
}
void check(char s[100])
{
	int i = 0, j = 0, dem = 0, max = 0;
	
	char w[100], maxlength[100];
	// tìm phần tử có độ dài lớn nhất
	while(j < strlen(s))
	{	
		w[i] = s[j];                         // gán từng phần tử trong chuỗi s sang chuỗi w
		if(s[j+1]==' ' || s[j + 1] == '\0')  // nếu gặp dấu cách hoặc ở ký tự cuối (sau đó là ký tự kết thúc chuỗi) thì dừng lại và kiểm tra
		{			
			if (max < strlen(w))             // so sánh độ dài chuỗi trước đó và chuỗi hiện tại
			{
				max = strlen(w);             
				strcpy(maxlength, w);        // copy chuỗi w chồng lên chuỗi maxlength    
			}			
			w[100] = NULL;                   // gán lại chuỗi w thành chuỗi rỗng
			
			i = -1;                          // gán lại i =-1 vì ở dòng 29 trở đi i sẽ phải bắt đầu lại từ 0
		}	
		i = i + 1;
		j = j + 1;
	} 
	printf("chuoi dai nhat la \n");
	printf("%s", maxlength);
}
void main()
{
	char s[100];
	input(s);
	check(s);
}

Làm cơ bản là ổn chỉ có một chỗ không ổn, quá không ổn:

w[100] = NULL;

Vượt ngoài mảng. Không phải là gán mảng thành rỗng, mà gán chỉ số 100 = NULL, trong khi mảng chỉ đến 99.

Sau khi tìm được 1 từ thì gán thêm kí tự NULL sau từ đó.

1 Like

Vâng em xin cám ơn anh ạ, anh có thể giải thích cho em hiểu vì sao lại khi tìm được 1 từ thì gán thêm kí tự NULL sau từ đó mà không dùng dòng for hay while để gán lại từng ký tự =NULL ạ.

Vì bạn dùng strcpy :smiley: cái abstraction thật sự nó mỏng lắm, cứ dùng trực tiếp thôi, y như mảng vậy. :slight_smile:

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