如何使用带字符串的开关?

时间:2014-01-01 16:26:15

标签: c++ string char

我正在尝试创建一个猜谜游戏,如果玩家猜到了许多正确的字符串之一,他将获胜。虽然switch语句在开关括号中只能使用一个字母,但是如果我将字符串放入其中它就不会起作用。

#include "stdafx.h"
#include < iostream>

using namespace std;

class Player
{
public:

    void Guess();
};
void Guess()
{
char guess;
char* word1 = "Dog";
char* word2 = "Cat";


    cout <<"Welcome to guess the word. Get ready..." <<endl;
    cout <<"Guess the word: " <<endl;
    cin >>guess;

    for (int i = 0; i <= 3; i++) //give the player 3 trys at guessing
    {

    switch(guess)
        {
        case 'Dog':
            cout <<"Dog is correct." <<endl;
            i = 3;
            break;

        default:
            cout <<guess <<" is incorrect." <<endl;
            cin >>guess;




        }
    }
}

int main()
{
  Guess();
  char f;
  cin >>f;
  return 0;
}

3 个答案:

答案 0 :(得分:3)

您不能将switch与字符串一起使用。这是不正确的:

case 'Dog': ...

Dog是一个多字节字符常量,而不是字符串。编译器应该发出警告。

此外,guess是单个字符。它也需要是一个字符串。您应该使用std::string,如下所示:

std::string guess;
cout <<"Guess the word: " <<endl;
cin >>guess;
if (guess == "Dog") ...

答案 1 :(得分:2)

在C ++中,switch语句只能比较基本数据类型,例如intchar。您需要使用一系列if语句来检查整个字符串,使用等号运算符(==)表示std::string个对象,或strcmp表示C样式字符串。

(注意不要对C风格的字符串使用相等运算符,因为它只会比较指针值而不是字符串内容。)

答案 2 :(得分:1)

  1. 使用std::string进行比较。
  2. if(...) { ... } else if(...) {...}
  3. 替换开关

    switch - case仅适用于整数类型,'Dog' 不是单个多字节字符,可以转换为{{1}但不是一个字符串。请注意,int之类的字符串必须包含在双引号中。