Проблема с созданием заголовка связанного списка - PullRequest
0 голосов
/ 08 октября 2018

Мой код предназначен для чтения последовательности строк из хешированного связанного списка, преобразования их всех в нижний регистр, помещения их в массив для использования быстрой сортировки и последующего размещения их в структуре данных, называемой счетчиком слов, которая включает в себяслово и сколько раз оно появляется в документах.В настоящее время, когда я запускаю код, он печатается правильно с использованием операторов print, которые я использую, но заголовок всегда устанавливается в ноль, когда я его печатаю.

Вот объявление wordCount:

typedef struct wordCount
{
    int count;
    char *word;
    struct wordCount* next;
} wordCount;

Вот сегмент метода, который должен делать то, что я описал выше.

else
    {
        char *toSort[curSize];
        int linkedListTraverse = 0; //Array index for each linked list node
        while(linkedList != NULL)
        {
            toSort[linkedListTraverse] = (char*) malloc(sizeof(linkedList->string));
            strcpy(toSort[linkedListTraverse],linkedList->string); //Copy the data from the linked list into an array 
            linkedList = linkedList->next;
            linkedListTraverse++;
        }
        int i = 0;
        while(i < curSize) //Convert all of the words to lowercase
        {
            char* str = toSort[i];
            char *p;
            for (p = str; *p != '\0'; p++)
                *p = (char)tolower(*p);
            i++;
        }
        i = 0;
        qsort(toSort, curSize, sizeof(char*), stringCmpFunc); //Sort the current node
        while(i < curSize)
        {
            printf("%s\n", toSort[i]);
            i++;
        }
        int curWordIndex = 0;
        int checkWordIndex = 1;
        wordCount *wordHead = NULL;
        wordCount *curWord = wordHead;
        while(curWordIndex < curSize)
        {
            curWord = (wordCount*) malloc(sizeof(wordCount));
            curWord->word = toSort[curWordIndex]; //Set the word
            curWord->count = 1; //Start the count out at 1
            while(strcmp(toSort[curWordIndex], toSort[checkWordIndex]) == 0) //While the two words are equal
            {
                checkWordIndex++; //Advance the leading index check
                curWord->count++;
                if(checkWordIndex >= curSize) //If the leading index goes beyond the array bounds
                    break;
            }
            if(checkWordIndex < curSize)
            {
                curWordIndex = checkWordIndex;
                checkWordIndex = curWordIndex + 1;
            }
            if(checkWordIndex >= curSize) //If the leading index goes beyond the array bounds
            {
                    if(strcmp(curWord->word, toSort[curWordIndex]) != 0)
                    {
                        printf("%s %d\n", curWord->word, curWord->count);
                        curWord = curWord->next;
                        curWord = (wordCount*) malloc(sizeof(wordCount));
                        curWord->word = toSort[curWordIndex]; //Set the word
                        curWord->count = 1; //Start the count out at 1
                    }
                    break;
            }
            //printf("CurWordIndex: %d\n CheckWordIndex: %d\n",curWordIndex, checkWordIndex);
            printf("%s %d\n", curWord->word, curWord->count);
            curWord = curWord->next; //Advance to the next node in the linked list
        }
        printf("%s %d\n", curWord->word, curWord->count);

А вот кодсегмент, который печатает только ноль

curWord = wordHead;
        while(curWord != NULL)
        {
            printf("%s %d\n", curWord->word, curWord->count);
            curWord = curWord->next;
        }

1 Ответ

0 голосов
/ 08 октября 2018

Put

if (wordHead == NULL) { wordHead = curWord; }

после

curWord = (wordCount*) malloc(sizeof(wordCount));

Обновлено

Вот еще одна проблема:

curWord = curWord->next;
curWord = (wordCount*) malloc(sizeof(wordCount));

Это должно быть:

curWord->next = (wordCount*) malloc(sizeof(wordCount));
curWord = curWord->next;

Примечание : Пожалуйста, следуйте правилам , это поможет нам вам помочь.

Обновлено / 2

Заменить это:

while(curWordIndex < curSize) {
    curWord = (wordCount*) malloc(sizeof(wordCount));

на это:

while(curWordIndex < curSize) {
    wordCount* tmp = (wordCount*) malloc(sizeof(wordCount));
    if (curWord) { curWord->next = tmp; }
    curWord =  tmp;
...