c语言查找文本文档中相同单词。我希望此程序能够查找的不仅仅只是英文,判断字符范围处应该如何改动?

#include<stdio.h>#include<stdlib.h>#include<fstream>#defineMAXSIZE1000//字符空间最大容量#defi... #include<stdio.h>
#include<stdlib.h>
#include<fstream>
#define MAXSIZE 1000 //字符空间最大容量
#define MAXLEN 20 //单词最大长度
#define MAXNUM 16 //一行中单词最多个数
typedef struct{ //单词类型
char word[MAXLEN]; //生成单词的字符空间
int len; //单词长度
}WordType;
struct { //文章中一行单词组成的有序链表
WordType data;
}Sequence[MAXNUM];
struct { //待查单词
WordType data;
int count;
}HeadNode[2];
int WordCmp(WordType wd1,WordType wd2)
{ //单词比较,若相等返回“0”
int k=1;
while(k<=wd1.len&&k<=wd2.len){
if(wd1.word[k]==wd2.word[k]) k++;
else if(wd1.word[k]<wd2.word[k]) return(-1);
else return(1);}
if(wd1.len==wd2.len) return(0);
else if(wd1.len<wd2.len) return(-1);
else return(1);
}
int main()
{ //主函数
int n,i,j,k;
char fname[10];
char s[MAXSIZE];
FILE *fp;
printf("请输入文章名:");
scanf("%s",fname);
strcat(fname, ".txt");
if((fp=fopen(fname,"r"))==NULL)
{printf("cannot open the file!");
exit(0);}
//初始化
HeadNode[1].count=0;

//输入待查单词,以“Enter”键结束
j=1;i=0;
printf("请输入要查询的单词(以Enter结束):\n");
s[i]=getchar();
do{i++;
scanf("%c",&s[i]);
}while(s[i]!='\n'); //暂存于s中
i=0;
for(;!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'));) i++; //转入 HeadNode
for(k=1;(s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z');)
{HeadNode[1].data.word[k]=s[i];
k++;i++;}
HeadNode[1].data.len=k-1;

for(;!feof(fp);) //读取到结尾
{fgets(s,MAXSIZE,fp);
//从文章中提取一行单词并将其组成一有序单词链表,每个单词作为一个结点
j=1;
for(i=0;s[i]!='\0';)
{for(;(!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')))&&(s[i]!='\0');)
i++;
for(k=1;((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))&&(s[i]!='\0');)
{Sequence[j].data.word[k]=s[i];
k++;i++;}
Sequence[j].data.len=k-1;
j++;}
n=(j-1);

for(j=1;j<=n;j++){ //比较计算单词出现次数
if((WordCmp(HeadNode[1].data,Sequence[j].data))==0)
{ HeadNode[1].count++;
}}
}

printf("单词"); //输出
for(j=1;j<=HeadNode[1].data.len;j++)
printf("%c",HeadNode[1].data.word[j]);
printf("在文章中出现%d次 ",HeadNode[1].count);
printf("\n");

fclose(fp);
system("pause");
}
展开
 我来答
索贝尔上尉
2012-12-18 · TA获得超过3318个赞
知道大有可为答主
回答量:1837
采纳率:66%
帮助的人:1838万
展开全部
你得意思是要包含CJK单词的识别?那就不是这么点代码可以完成的事情了,而且那样的难点是如何判定单词而非单字

你可以“汉语 分词”为关键字搜索一下相关资料
更多追问追答
追问
难道不能把遇到空格之前的字符都输入Sequence[j].data.word[i]中。然后遇到个空格之后j++吗?
追答
问题是汉语的单词并不是以空格分隔开的

例如“今天天气很好”和“今天天气不好”
按你的方法用空格把这两个短句分隔开,因为这两个短句不是每个字一一对应的,那么程序会判定这俩个短句不一样,也就是a句出现一次b句出现一次,但是实际情况是一共出现了四个单词“今天”“天气”“很好”“不好”,其出现频度为2,2,1,1,所以程序在这个情况下并不适用

我理解错你的意思了,如果是查询某一个确定的汉语序列,那你得把单字的数据类型改成TCHAR,并且#define _UNICODE
myxia66
2012-12-18 · 超过16用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:56.4万
展开全部
看书
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式