2 yanpingzaizai yanpingzaizai 于 2015.06.21 20:32 提问

C语言求助,统计出一个字符串中的单词数

/*7.编写一个函数,统计出一个字符串中的单词数,
将每个单词存起来,并且返回最长单词。
函数原型定义如下:char * word ( char * str ) ;*/
#include
#include
char *word(char *str)
{
int i=0,maxi,j=0,k=0,flag=0;
int s,t;
char *p[100];
while(str[j]!='\0')

{
if(str[j]==' ')
{
str[j]='\0';//遇空格,在串尾加“\0",为什么运行到这里就出错??
flag=0;
if( str[j+1]!='\0')
k++;
}
else flag++;
if(flag==1)
{
p[k]=&str[j];
}
j++;
}
for(i=0;i {
t=strlen(p[i]);
if(t>s);
s=t;
maxi=i;
}
return(p[maxi]);
}

void main()
{
char *s="hellow world!welcome to my country";
char *t=word(s);
printf("%s\n",t);
}
这个哪里有问题??

3个回答

u012685794
u012685794   2015.06.21 20:45

这题不是你这个思路,我只给你提示这题用到字典树。


danielinbiti
danielinbiti   Ds   Rxr 2015.06.21 21:21
 str[j]='\0';//遇空格,在串尾加“\0",为什么运行到这里就出错??   这个不能修改,因为str是字符串常量,不能在修改
 if(t>s);  s没有初始化,存在风险

 可以看见
 http://zhidao.baidu.com/link?url=AjOrX6WoqPjy26J7WfWRnAEoy7sAg1vm5TfEY_FdVOAKEveM81PuApyX2FrA5GF-HIJ8z-t3vYvyVAc81wnNUtUNB9EHQQHHNXx3S3W8_s3
 的源代码
zuoyangding
zuoyangding   2015.07.01 03:11

不知道你这题对单词的定义是不是只是连在一起的字母就算单词,如果不是的话,那你应该有一个字典树,然后你要拿你的字符串中的每一个单词取匹配。
如果是的,你写的代码只能以空格区分单词,肯定是不对的。比如字符串“word&I AM---123--FEEL321 45"你就没法处理。你得考虑字符串里面有数字和符号的情况。
最后回答你程序里面提出的那个问题。因为你是直接对你的字符串进行操作,那么如果你在字符串后面加上"\0",那之后你就没法获取后面的字符了。所以你需要一个新的字符串去储存你取出的单词,然后在新的字符串的末尾加上“\0”,这样你才可以继续读取原字符串后面的字符。建议你用gdb设置断点自己debug一下就能看到了。或者你写一个小的test程序专门试一下字符串的分割就明白了。

Csdn user default icon
上传中...
上传图片
插入图片