| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2141 人关注过本帖
标题:switch语句问题
只看楼主 加入收藏
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
 问题点数:0 回复次数:8 
switch语句问题
在学习C++ Primer时遇见一个习题,关于switch语句的.
题目如下(我把它改了一下,因为书上题目出的很简单,是结合书中的一个例子的扩展).
用switch语句写一个字符记数的程序,输入一段字符序列,能够记录其中如下双字符出现的次数:ff、fl、fi。
我的程序如下:
#include<string>
#include<iostream>
using namespace std;
void main()
{
string ch;
int ffcnt=0,flcnt=0,ficnt=0;
while(cin>>ch)
{
switch(ch)
{
case'f':
while(cin>>ch)
{
switch(ch)
{
case'f':
++ffcnt;
break;
case'l':
++flcnt;
break;
case'i':
++ficnt;
break;
default:
break;
} //结束第二个switch语句
} //结束第二个while语句
default:
break;
} //结束第一个switch语句
} //结束第一个while语句
cout<<"numble of ff:\n"<<ffcnt<<endl;
cout<<"numble of fl:\n"<<flcnt<<endl;
cout<<"numble of fi:\n"<<ficnt<<endl;
}
我在这里用了一个switch的嵌套,不知道可以不可以,我的用意就是当出现一个f时就再用第二个switch来判断接下来的第二个字符是否为f,l,i中的任意一个。
但编译出问题。Error C2450: switch expression of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' is illegal
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
搜索更多相关主题的帖子: switch语句 string 字符 cin 
2007-06-24 16:06
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

嵌套是允许的,但是一般不这样用。

并且switch中的条件要是整形值,string 不行,可以换成char。


Fight  to win  or  die...
2007-06-24 16:17
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

这样改吧:
[CODE]#include<string>
#include<iostream>
using namespace std;
void main()
{
char ch1,ch2;
int ffcnt=0,flcnt=0,ficnt=0;
while(cin>>ch1>>ch2)
{
switch(ch1)
{
case'f':
switch(ch2)
{
case'f':
++ffcnt;
break;
case'l':
++flcnt;
break;
case'i':
++ficnt;
break;
default:
break;
} //结束第二个switch语句
//结束第二个while语句
default:
break;
} //结束第一个switch语句
} //结束第一个while语句
cout<<"numble of ff:\n"<<ffcnt<<endl;
cout<<"numble of fl:\n"<<flcnt<<endl;
cout<<"numble of fi:\n"<<ficnt<<endl;
}[/CODE]


Fight  to win  or  die...
2007-06-24 16:19
HJin
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:401
专家分:0
注 册:2007-6-9
收藏
得分:0 

[CODE]string ch;
...
switch(ch)[/CODE]
switch ( expression )
case constant-expression : statement
[default : statement]


The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type. Integral promotion is performed as described in Integral Promotions.


I am working on a system which has no Chinese input. Please don\'t blame me for typing English.
2007-06-24 16:23
neverDie
Rank: 1
等 级:新手上路
威 望:1
帖 子:123
专家分:0
注 册:2007-5-5
收藏
得分:0 
原来如此,swich要是整数。

2007-06-24 16:30
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
匹配错误
定义时的ch是字符串型, 而switch匹配的是字符型

按照你的思路,这样改下吧


#include<cstdio>
#include<iostream>
using namespace std;
void main()
{
char ch;
int flag=0,ffcnt=0,flcnt=0,ficnt=0;
while((ch=getchar())!='\n')
{
switch(ch)
{
case 'f':if(flag) ++ffcnt;flag=1;break;
default:
switch(ch)
{
case'l':
if(flag) ++flcnt;flag=0;
break;
case'i':
if(flag) ++ficnt;flag=0;
break;
default:
flag=0;
break;
} //结束第二个switch语句
break;
} //结束第一个switch语句
} //结束第一个while语句
cout<<\"numble of ff:\n\"<<ffcnt<<endl;
cout<<\"numble of fl:\n\"<<flcnt<<endl;
cout<<\"numble of fi:\n\"<<ficnt<<endl;
}

unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-06-24 19:41
doom5211
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-7
收藏
得分:0 
谢谢无限循环以及其他大虾的指点,我知道我出错的地方了,的确switch里的表达式要为整型的,而我用的是ch,是字符串类型,的确不匹配。
但我的题目是要考虑要输入一个字符序列,按照几位大虾改的只能输入两个字符(也许是我还没有看懂,汗!)是否这样的修改不满足题目的要求啊。题目要求对于一个输入的字符序列,再来计算其中符合要求的双字符个数.

2007-06-25 15:09
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用doom5211在2007-6-25 15:09:07的发言:
谢谢无限循环以及其他大虾的指点,我知道我出错的地方了,的确switch里的表达式要为整型的,而我用的是ch,是字符串类型,的确不匹配。
但我的题目是要考虑要输入一个字符序列,按照几位大虾改的只能输入两个字符(也许是我还没有看懂,汗!)是否这样的修改不满足题目的要求啊。题目要求对于一个输入的字符序列,再来计算其中符合要求的双字符个数.

我那个不可以,但是6楼游乐园大哥的可以,你仔细看看他的代码吧!


Fight  to win  or  die...
2007-06-25 15:41
zjh171
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-1-15
收藏
得分:0 
我亲自运行了一下程序,发现 aipb2007 的程序并没有错,
我亲自运行了一下程序,发现 aipb2007 的程序并没有错,但是,确实逻辑上有问题,麻烦问一下,这究竟是为什么
这可能涉及到我的 cin 语句以及右移操作符的深入了解,我也许还没有了解到那种程度,还请各位指点

[ 本帖最后由 zjh171 于 2014-1-19 17:08 编辑 ]
2011-01-15 20:55
快速回复:switch语句问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020922 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved