Общая цель, которую я имею, состоит в том, чтобы иметь возможность вводить строку и добавлять ее в список. Моя главная проблема связана с makenewnode. Я довольно уверен, что основная и моя структура прочные, я несколько уверен в базовом коде в поиске, но особенности не выглядят хорошо. Мой вопрос в основном, что не так с операциями печати в основном, использует makenewnode дважды в поиске избыточности и работает на самом деле, как он должен работать.Связанный список и ввод
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
туалет (количество слов) должен держать список слов в WRD, количество слов в счете и последующих предназначено для продвижения по списку.
struct wc {
struct wc* next;
char* wrd;
int count;
};
голова предназначается, чтобы быть в самом начале списка
struct wc* head=NULL;
makenewnode является довольно очевидны. Он принимает символ * с, выделяет память, добавляет графу (должно быть число слов в списке), и добавляет слово WRD (должен быть список слов)
void makenewnode(char* s){
struct wc* newnode;
char* newword;
newword=malloc(strlen(s)+1);
strcpy(newword,s);
newnode=malloc(sizeof(struct wc));
newnode->wrd=newword;
newnode->count=1;
newnode->next=head;
head=newnode;
}
Поиск предполагается взять строку ввода и решить, находится ли она в списке. Цикл while должен работать до конца входной строки. Он сравнивает wrd (слова, уже добавленные в список) с вводом, и если вход уже находится в wrd, он добавляет к счету и устанавливает found = 1 (точно так же, как символ, 1 фактически не означает ничего). Если вход не находится в wrd, он создает новый узел для ввода с использованием makenewnode. Я чувствую себя как заявление else, а второе, если утверждение избыточно, но я не уверен.
void search(char* linebuf){
struct wc* node;
int found=0;
found=0;
node=head;
while(node!=NULL){
if(strcmp(node->wrd, linebuf)==0){
node->count++;
found=1;
break;
}
else{
makenewnode(linebuf);
}
if(found==0){
makenewnode(linebuf);
}
}
}
основной предполагается получить входные строки (не более 100 символов) и просто запустить их через поиск (который проходит через makenewnode). Затем он должен напечатать количество слов (количество) и список слов (wrd) k.
int main(int argc, char* argv[]){
struct wc* node;
char linebuf[100];
printf("Enter Words: ");
while(fgets(linebuf,100,stdin)!=0){
printf("Input line: %s", linebuf);
printf("Enter Words: ");
search(linebuf);
}
/*
I'm pretty iffy on these print statements but the rest of main is fine (I think)
printf("%d", count);
printf("%s", wrd);
*/
return 0;
}
У вас есть вопрос? –
Было бы неплохо, если бы у него был настоящий ** вопрос ** –
Для части iffy используйте '% s' вместо'% c', поскольку последний ожидает один символ –