问题描述
- 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]!=''){
if(str[j]==' ')
{
str[j]='';//遇空格,在串尾加“",为什么运行到这里就出错??
flag=0;
if( str[j+1]!='')
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("%sn",t);
}
这个哪里有问题??
解决方案
这题不是你这个思路,我只给你提示这题用到字典树。
解决方案二:
str[j]='';//遇空格,在串尾加“",为什么运行到这里就出错?? 这个不能修改,因为str是字符串常量,不能在修改
if(t>s); s没有初始化,存在风险
可以看见
http://zhidao.baidu.com/link?url=AjOrX6WoqPjy26J7WfWRnAEoy7sAg1vm5TfEY_FdVOAKEveM81PuApyX2FrA5GF-HIJ8z-t3vYvyVAc81wnNUtUNB9EHQQHHNXx3S3W8_s3
的源代码
解决方案三:
不知道你这题对单词的定义是不是只是连在一起的字母就算单词,如果不是的话,那你应该有一个字典树,然后你要拿你的字符串中的每一个单词取匹配。
如果是的,你写的代码只能以空格区分单词,肯定是不对的。比如字符串“word&I AM---123--FEEL321 45"你就没法处理。你得考虑字符串里面有数字和符号的情况。
最后回答你程序里面提出的那个问题。因为你是直接对你的字符串进行操作,那么如果你在字符串后面加上"",那之后你就没法获取后面的字符了。所以你需要一个新的字符串去储存你取出的单词,然后在新的字符串的末尾加上“”,这样你才可以继续读取原字符串后面的字符。建议你用gdb设置断点自己debug一下就能看到了。或者你写一个小的test程序专门试一下字符串的分割就明白了。