Удаление повторяющихся слов / строк из массива в C

В настоящее время у меня проблемы с выводом кода.
Он заполняет массив правильно, но что-то не так с моим удалением повторяющихся слов.

Заполнение массива слово за словом:

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

int main(void) {
char str[610] = "C (pronounced like the letter C) is a general-purpose computer programming language developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. Although Cwas designed for implementing system software, it is also widely used for developing portable application software. C is one of the most widely used programming languages of all time and there are very few computer architectures for which a C compiler does not exist. C has greatly influenced many other popular programming languages, most notably C++, which began as an extension to C.";
char tokChars[9]=" ;().,n";
char *cptr;
int size = 100;
char array[1000][20];
char ob[1000][20];
int  count;
int i= 0;
cptr = strtok(str, tokChars);
count = 1;

while(cptr != NULL)
       {
            strcpy(array[i], cptr);
            printf("n%sn",array[i]);
            printf("token %d --> %s n",count , cptr);
            cptr = strtok(NULL, tokChars);
            count++;
            i++;
       }

Чтобы удалить повторяющиеся слова:

int k = 0, r = 0,h = 0;
for(r= 0 ; r<100 ; r++)
{
    while ( k< 100)
    {
        int a;
        a = strcmp(array[r], ob[k]);
         if (a != 0)
         {
             strcpy(ob[h],array[r]);
             h++;

             break;
         }


         k++;
    }
}

int m = 0;
for(m= 0; m<size; m ++)
{
    printf("n%sn",ob[m]);
}
return EXIT_SUCCESS;
}

По-видимому, выходные данные распечатали каждое слово в массиве. Что я должен изменить? или что-то, что я неправильно понял

1 ответ

  1. Должно работать следующее:

    int k, r, h;
    
    strcpy(ob[0],array[0]); h= 1;
    for(r= 0 ; r<100 ; r++)
    {
        k= 0;
        while (k< h)
        {
            if (strcmp(array[r], ob[k]) == 0)
                 break;
             k++;
        }
        if (k==h) {
            strcpy(ob[h],array[r]);
            h++;
        }
    }
    

    Основная проблема заключается в том, что вы сравниваете следующий элемент arrayтолько с одним элементом ob(выходной массив), где он не является дубликатом, если ни один из obсравнивает равным. Затем вы можете добавить этот элемент obи продолжить.