在C ++的switch语句中,我相信你可以在交换机中使用int或char。出于我的目的,我想使用char。我想要使用的char是字符串中的char。这是我的功能:
#include <string>
using namespace std;
...
int calindex(string* seq)
{
int index = 0;
for(int i=0;i<seq.length();i++)
{
switch(seq[i])
{
...
}
}
return index; // index is modified within the switch statement
}
然而,当我编译时,我得到一行错误:“switch(seq [i]”表示“切换数量不是整数”。谁能看到我做错了什么?
答案 0 :(得分:3)
switch(seq[i])
应该是:
switch((*seq)[i])
你忘了先取消引用指针。它试图访问第i个字符串。也:
seq.length();
应该是:
seq->length();
答案 1 :(得分:1)
switch
语句中的大小写值需要是编译时常量。 switch
语句的要点是具有一种快速,高效的级联if
语句。编译器对switch语句执行特殊操作以使其快速,但要做到这一点,它需要在编译时知道所有情况都是。
答案 2 :(得分:0)
seq
是string *
,而不是char *
,因此seq[i]
的类型为string
。
在C ++中,string
比char数组更受欢迎,同样,引用比指针更受欢迎,因此将参数声明更改为
string &seq
以便string::operator []
生效并返回(引用)char
。
(你可以将seq
声明为char *
,但那时是C而不是C ++ ......)
答案 3 :(得分:0)
索引字符串并使用char值切换是正确的,但问题是您没有索引字符串,而是指向字符串的指针。那么你应该取消引用指针,但为什么不在第一个地方使用字符串?
答案 4 :(得分:0)
您正在将字符串指针传递给calindex,但您将seq视为通过值或引用传递字符串。
为了使您的switch语句有效,您需要以两种方式之一取消引用指针:
(*seq)[i]
或
seq->at(i)
请注意,如果您尝试访问不存在的元素,后者将抛出异常,前者不会。
答案 5 :(得分:0)
这里的问题是通过指针传递:
int calindex(string* seq)
为什么不使用:
int calindex(string& seq)
以这种方式做到这一点更安全。
最重要的是你不必先确定指针是否为零
作为参考,你不会犯这样一个简单的错误,比如省略解除引用。