#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ừ đó.