c++字符串作为参数传递

//统计字符串中单词个数#include<iostream>usingnamespacestd;intfun(charstr[40]){inti,n=0,word=0;f... //统计字符串中单词个数
#include<iostream>
using namespace std;
int fun(char str[40])
{int i,n=0,word=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ') word=0; //是空格就为0
else if(word==0) //不是空格就判断之前有空格
{
word=1; //复位用来判断空格是否存在的开关
n++; //如果之前有空格,单词数加1
}
return n;
}
void main()
{//char str[40];
//cout<<"输入字符串:";
//cin>>str;
cout<<"单词个数为:"<<fun(str[40])<<endl;
}
为啥错了
注释不是重点。。
展开
 我来答
King920406
2012-05-20 · TA获得超过594个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:84.8万
展开全部
修改这句就行:
cout<<"单词个数为:"<<fun(str)<<endl;
只传递数组名就行,它会自动转换为指针
还有什么不明白的可以问我
更多追问追答
追问
谢谢,现在编译没问题了,但是逻辑上不对
输入字符串后,统计单词个数(返回值)始终为1;是不是用cin输入字符串中不能带空格?
追答
if判断有问题,给你改了,不过还得需要你自己了解,不会很难,写程序的时候注意下,尤其是判断语句这些,写完后.再回过头看一遍,养好这习惯,以备到时写大程序的时候不会手忙脚乱
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ') word=0; //是空格就为0
else // if(word==0) //不是空格就判断之前有空格
{
word=1; //复位用来判断空格是否存在的开关
n++; //如果之前有空格,单词数加1
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
870177103
2012-05-20 · TA获得超过522个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:347万
展开全部
void main()
{//!!!!!!!char str[40];
//!!!!!!!!!cout<<"输入字符串:";
//!!!!!!!!!cin>>str;
cout<<"单词个数为:"<<fun(str[40])<<endl;
}
注释没去掉吧,VC会说str undefined(未定义)
更多追问追答
追问
忘了去了,这不是关键所在
fun(str[40])这样传递总感觉有问题,该怎么改一下?
追答
你编程风格很有问题,虽然我不是很懂C++,但我认为你这样写更好
#include

using namespace std ;

int fun (char str[40])
{
int i ;
int n=0 ,word=0 ;

for(i=0 ; str[i] != '\0' ; i++)
{
if(str[i]==' ')

word=0; //是空格就为0

else if(word==0) //不是空格就判断之前有空格
{
word = 1 ; //复位用来判断空格是否存在的开关
n++ ; //如果之前有空格,单词数加1
}!!!!!!!!!!!!!!!!!!!!!!看到没有
}

return n ;
}
void main()
{//char str[40];
//cout>str;
cout<<"单词个数为:"<<fun(str[40])<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
marsding2006
2012-05-20 · TA获得超过4627个赞
知道大有可为答主
回答量:3090
采纳率:40%
帮助的人:1283万
展开全部
int fun( char str[ ] ),数组名做参数应写成这种形式。调用时应该是fun(str),用str[40]只能表示一个char,并且还越界了。函数逻辑好像没错,只大概看了下。
更多追问追答
追问
int fun(char str[])
{int i,n=0,word=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ') word=0;
else if(word==0)
{
word=1;
n++;
}
}
return n;
}
void main()
{ char str[40];
cout>str;
cout<<"单词个数为:"<<fun(str)<<endl;
}
编译没问题了,可是逻辑又不对,怎么输入返回值都是1
追答
好久不动手,生疏了,逻辑确实有问题。若是简单一点的,比如字符串前后无空格,且单词间空格只有一个,那么很简单的统计空格数+1即可。
int word = 1;
for(i=0;str[i]!='\0';i++)
if(str[i]==' ')
word++;
return word;
若是想做的复杂点,就要考虑很多了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0190b43b5
2012-05-20
知道答主
回答量:30
采纳率:0%
帮助的人:14.8万
展开全部
同楼上啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式