Mình làm bài này sử dụng strtok để cắt chuỗi xong sử dụng strstr để so sánh tuy nhiên code bị lỗi buffer overflow error và thuật toán cũng chưa giải quyết được đầy đủ các trường hợp, mọi người chỉ mình thuật toán câu này và nếu được thì xem hộ mình lỗi overflow ở đoạn code dưới với
#include <iostream>
#include <cstring>
using namespace std;
void clearchar(char str[], int delete_location)//k can quan tam
{
for (int i = delete_location; i < strlen(str); i++)
str[i] = str[i + 1];
// str[strlen(str)-1]='\0';
}
void clearspace(char str[])//k can quan tam
{
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == ' ' && str[i + 1] == ' ')
{
clearchar(str, i);
i--;
}
}
if (str[0] == ' ')
clearchar(str, 0);
if (str[strlen(str) - 1] == ' ')
clearchar(str, strlen(str) - 1);
if (str[strlen(str) - 1] != ' ')
str[strlen(str)] = '\0';
}
void printFirstRepeatedWord(char str[])
{
// don dep khoang trang thua
clearspace(str);
// tao chuoi temp luu lai du lieu cua str
char *temp = &str[strlen(str) + 1];
for (int i = 0; i < strlen(str); i++)
temp[i] = str[i];
int t = 0;
if (str[0] != '\0') // kiem tra neu chuoi trong
{
// tao chuoi p lay tung tu de xet
char *p = strtok(str, " ");
while (p != NULL)
{
if (!strchr(temp, ' ')) // dieu kien thoat vong while
break;
str = strchr(temp, ' ') + 1;
if (strstr(str, p))
{
cout << p; // in p neu p co lap lai
t++;
break;
}
temp = str;
p = strtok(NULL, " ");
}
}
if (t == 0)
cout << "No Repetition"; // p khong lap lai
}
int main()
{
char str[] = " cc bb bb aa ";
printFirstRepeatedWord(str);
return 0;
}