使用字符串中的char来切换语句,其中包含“错误:切换数量不是整数”

时间:2013-07-03 19:39:15

标签: c++ string char switch-statement

在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]”表示“切换数量不是整数”。谁能看到我做错了什么?

6 个答案:

答案 0 :(得分:3)

switch(seq[i])

应该是:

switch((*seq)[i])

你忘了先取消引用指针。它试图访问第i个字符串。也:

seq.length();

应该是:

seq->length();

答案 1 :(得分:1)

switch语句中的大小写值需要是编译时常量。 switch语句的要点是具有一种快速,高效的级联if语句。编译器对switch语句执行特殊操作以使其快速,但要做到这一点,它需要在编译时知道所有情况都是。

答案 2 :(得分:0)

seqstring *,而不是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)

以这种方式做到这一点更安全。

最重要的是你不必先确定指针是否为零

作为参考,你不会犯这样一个简单的错误,比如省略解除引用。