ファイルに表示される単語のリンクリスト(繰り返しはありません)と、最初に表示される行を作成しています。私は難しい部分であると思っていたことを終えました(ファイルを解析しながらファイルを解析する)が、今私の方法の一つで問題を抱えていると思います。私のコードは2つのファイルに含まれていますが、ドライバと一緒にコードに問題があるメソッドだけを含んでいます。 (それがファイルを見つけることができなかったし、それが実行されないだろうと言い続けているため、私はGDBを使用してみました、私は私が間違ってそれを使用していたと思います。)リンクリストの問題
int main(int argc, char **argv){
file = fopen(argv[1],"r");
/*struct fileIndex *fIndex = NULL;*/ /*put this in header file??*/
fIndex = NULL;
delimiters = " .,;:!-";/*strtok chars to seperate*/
rewind(file);
int buffer = 65;
char str[buffer+1];/*where the lines are being stored*/
char *token, *cp;
int i;
int len;
while((fgets(str, buffer, file))!=NULL){/*inserting lines*/
for(i=0; i<buffer; i++){
if(str[i]=='\n'){
str[i]= '\0';
break;
}
}
len = strlen(str);
cp = xerox(str);
token = strtok(cp, delimiters);
/*if(token!=NULL)
printf("The word is %s\n", token);*/
if(!present(fIndex, token)&&(token!=NULL)){
insert(fIndex, i+1, token);
}
while(token!=NULL){
token = strtok(NULL, delimiters);
/*if(token!=NULL)
printf("The word is %s\n", token);*/
if(!present(fIndex, token)&&(token!=NULL)){
insert(fIndex, i+1, token);
}
}
}
fclose(file);
struct fileIndex *root;
root = fIndex;
while(root != NULL){
printf("The string is %s and on line %d\n", root -> str, root -> lineNum);
root = root -> next;
}
free(fIndex);
free(cp);
return 0;
}
struct fileIndex *insert(struct fileIndex *head, int num, char *insert){
struct fileIndex* newnode = malloc(sizeof(struct fileIndex));
if(newnode==NULL)
exit(1);
newnode -> str = insert;
newnode -> lineNum = num;
newnode -> next = head;
return newnode;
}
編集:私はまた私の中で問題を考えています単語がすでにあるかどうかを調べるメソッド。私は、単語が挿入され、すべての単語が印刷される場合にのみ印刷する必要があるprint文を入れます。リストを印刷する最後の小さなループは印刷されていないので、最初にそこに到達してループしないときにはNULLに達すると思います。
present(struct fileIndex* fIndex, char *findIt){/*finds if word is in structure*/
struct fileIndex* current = fIndex;
while(current!=NULL){
current = current -> next;
if(strcmpigncase(current -> str, findIt)==0){
return current -> lineNum;
}
}
return 0;
}
どのような問題がありますか? –