微信聊天机器人源码:再次请求帮忙修复下面的C代码

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 14:56:14
#include "stdio.h"
#include "string.h"

main()
{
FILE *p;
char word[15]={0},user[15]={0},ch;
int sum=0,j=0,n;
if((p=fopen("f:\\super.txt","r"))!=NULL)
{
gets(user);
while((ch=fgetc(p))!=EOF)
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
{
word[j]=ch;
j++;
}
else
{
if((n=strcmp(word,user))==0)
{
sum++;
j=0;
}
}
}
printf("%d",sum);
}
else printf("error");
}
其中文件super.txt是随便输入一些英语单词就行,代表英语文章;这代码理想中要实现的功能是用户输入一个单词,然后统计文章里面有多少个这样的单词.
请指出问题并且修正(最好给出正确的代码)

主要问题是当一个单词读入结束后,没有将word清空.
我帮你简单修改了一下:
#include "stdio.h"
#include "string.h"
main()
{
FILE *p;
char word[15]={0},user[15]={0},ch;
int sum=0,j=0,n;
if((p=fopen("super.txt","r"))!=NULL)
{
gets(user);
while((ch=fgetc(p))!=EOF)
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
{
word[j]=ch;
j++;
}
else
{
if((n=strcmp(word,user))==0)
{
sum++;
}
j=0;//只要是非字母就重新读入word
memset(word,'\0',15);//清空字符数组
}
}
printf("%d\n",sum);
}
else printf("error");
}
------------------------------------------
再补充说明一下如果super.txt以user所代表的字符串结尾的话,由于ch已经为EOF,所以此时sum++;并未执行,最后的统计结果会少一个,程序在这一点的改进,相信楼主能完成的。

经调试运行,楼下说的问题完全不存在,当文本为abcd1abcd ,输入ab时统计结果为0,这正合乎要求。

再说一下,不足的是最后以以user所代表的字符串结尾的话结果少1。

我不会做 但看的出楼上写的都有大问题
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
{
word[j]=ch;
j++;
}
else
{
if((n=strcmp(word,user))==0)
{
sum++;
}
如果是字母就读入WORD,否则就比较之前读入的字符串是否与USER相等,用STRCMP方法的思路就错了,比如文本写的是abcd1abcd 输入的是ab,是吧。我忘记了方法是什么了 C里面好象有一个方法返回字符串在另一个字符串第一次出现的指针。

我找到了是strstr(s1,s2)方法 返回一个指针,字符串s1第一次在s2出现的位置。
算法下面:
while((ch=fgetc(p))!=EOF)
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
{
word[j]=ch;
j++;
if(strstr(user,word))//C好象是非0既为真,所以读入的字符串WORD中包含字符串USER就该执行IF的语句
{
sum++;
j=0;
} //如果有一个就累加一次,j=0,清空字符数组WORD,以供继续读文本的内容,继续判断读入的WORD中是否包含USER,有了就累加一次,最后算出总数,OK了。
}
}