Thuật toán in ra từ đầu tiên trong chuỗi lặp lại

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

Code này debug được mà bạn, debug là bạn sẽ thấy dòng nào biến nào lỗi ngay, nếu bạn gắn bó với nghề này thì bạn phải tập debug đi, debug là kỹ năng cần thiết lắm đấy.

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