以下程序存储每个单词,然后将它们打印出来并多次出现。
全局typedef
声明:
typedef struct {
char * word;
int occ;
}
words;
words *data=NULL;
我的搜索功能有问题。我创建了一个返回的函数int
,如下所示:(max
是结构数组的不断更新的大小,这就是为什么我在EOF
达到之后调用搜索函数。)
int search(char *word,int max)
{
int i;
for(i=0; i<max; i++)
{
if(!strcmp(data[i].word,word)) return i;
}
return -1;
}
但我注意到我应该编写一个具有该原型的搜索函数:
struct abc *find(char *word)
所以我创建了以下代码:
struct words *findword(char *word)
{
struct words *ptr;
for (ptr = data; ptr != NULL; ptr++) { /* IS THE STOP CONDITION OK? */
if (strcmp(word, ptr->word) == 0)
return ptr;
}
return NULL;
}
我在编译过程中收到很多错误:
reverse.c:在函数'findword'中:
reverse.c:73:警告:来自不兼容指针类型的赋值
reverse.c:73:错误:指向未知结构的指针的增量
reverse.c:73:错误:指向不完整类型的指针的算术运算
reverse.c:74:错误:取消引用指向不完整类型的指针
reverse.c:在函数'main'中:
reverse.c:171: 错误: 'which' 未声明(在此函数中首次使用)
reverse.c:171:错误:(每个未声明的标识符只报告一次
reverse.c:171:错误:对于它出现的每个函数。)
制作:* [reverse.o] 错误 1
which
是int
分配给我第一次编写的搜索函数的返回的变量。错误which
很容易修复,但我不知道如何替换它(使用我的基本搜索功能的解决方案):
data[which].occ++;
如何修复它以使其适用于我的新搜索方法?
编辑
main()
添加:
int main(int argc, char **argv)
{
char *word;
words *temp;
int c,i,num;
/*int which;*/
FILE *infile;
if(argc!=2) {}
if((infile=fopen(argv[1],"r"))==NULL) {}
num=0;
while(1)
{
c=fgetc(infile);
if(c==EOF) break;
if(!isalpha(c)) continue;
else ungetc(c,infile);
word=getword(infile);
word=convert(word);
/*which=search(word,num);*/
if(findword(word))
{
if(!(temp=realloc(data,sizeof(words)*(num+1))))
{}
else
data=temp;
data[num].word=strdup(word);
data[num].occ=1;
num++;
}
else
data[which].occ++;
free(word);
}
sort(num-1);
for(i=0;i<num;i++)
{}
free(data);
if(fclose(infile))
{}
return 0;
}
我已经离开{}
了不相关的代码片段,例如。错误处理。
EDIT2 我在上面要求的东西是固定的。但是,我现在遇到了段错误。我会给出整个代码的链接,我不想把它放在一个编辑过的帖子中,因为它会造成很大的混乱。Seg 错误是由第 73 行和第 152 行引起的(strcmp 无法正常工作)。希望完整的代码更容易理解。 完整代码