一个关于C语言的问题,帮我查查错

来源:百度知道 编辑:UC知道 时间:2024/05/08 07:15:20
题目是这样的:
完成一段(由若干行构成)文字中关键词的统计:
1)定义结构并初始化
struct Key{char *word,int count};
2)定义结构变量数组:struct Key keytab[]={{“auto”,0},{“case”,0},{“while”,0}};
3)从键盘获取一段文字,并存于字符数组page(或字符指针中)
4)编写子函数获取文字中各个单词
5)编写子函数将各单词与keytab数组中的单词比较,若一致则该元素的成员count增1.
6)重复4)5)直至段尾。
注:单词间分隔可能是空格、换行符、标点符号等。
这是我写的:
#include "stdio.h"
#include "ctype.h"
#include "string.h"
struct Key
{
char *word[4];
int count;
};
struct Key keytab[3]={{"auto",0},{"case",0},{"while",0}};
void getwords(char s[]);
void judge(char *a[]);
int num;
main()
{
char s[100];
printf("Please enter some words:\n");
scanf("%s",&s);
getwords(s);
printf("auto=%d\tcase=%d\twhile=%d",keytab[0].count,keytab[1].count,keytab[2].count);
}
void judge(char *a[])
{
int j;
f

过来挣两分就走,没太多时间给你改程序:

你分析单词的存储空间只有temp[100],每个单词都放到这里,
然后 *a[1000]虽然遇到一个单词就保存一个指针,不过保存的都是temp的首地址。
所以到头来,你只在temp当中保存了最后一个单词的内容。
a[1000]当中无论有多少个单词,指向的都是同一个地址:最后一个单词。

你直接检索char s[]吧,每次遇到一个单词起始,就把所在的位置记录到a[1000]的适当位置,再加一个数组记录对应单词的长度。
这样就可以记录所有的单词位置。
比较的时候,先判长度,长度相同再用strncmp判,就可以了。

另外,定义的结构体不应该是*word[4],就是 *word。