首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将char *与字符串文字进行比较时出现问题

将char *与字符串文字进行比较时出现问题
EN

Stack Overflow用户
提问于 2014-02-21 07:20:49
回答 4查看 2.5K关注 0票数 0

我正在为一个班级项目做Go Fish。在这段代码中,我试图从玩家那里获取一张牌的面值,并将其转换为它的整数值(2 - 10,J=10,Q=11...)

代码语言:javascript
复制
    char valued[10];
    cin.clear();
    cin.ignore(INT_MAX, '\n');
    cout << "What card would you like to ask " << _otherplayers[IndexOfPlayerChoice]->GetName() << " for? (2-10, J, Q, K, A) ";
    cin >> valued;
    int size = strlen(valued) +1;
    char * temp = new char[size];
    strcpy_s(temp, size, valued);

    if (temp == "J" || temp == "j")
        value = 11;
    if (temp == "Q" || temp == "q")
        value = 12;
    if (temp == "K" || temp == "k")
        value = 13;
    if (temp == "A" || temp == "a")
        value = 14;
    if (temp == "2" || temp == "3" || temp == "4" || temp == "5" || temp == "6" || temp == "7" || temp == "8" || temp == "9" || temp == "10")
        value = int(temp);

但是,当我运行代码时,它永远不会落入任何if语句。在调试器中,它将显示temp = "A“,但当它到达该if语句时,它的计算结果将为false。

你知道为什么会发生这种情况吗?

编辑:尝试像这样使用strcmp

代码语言:javascript
复制
    if (strcmp(temp, "J") == 0 || strcmp(temp, "j") == 0)
        value = 11;
    if (strcmp(temp, "Q") == 0 || strcmp(temp, "q") == 0)
        value = 12;
    if (strcmp(temp, "K") == 0 || strcmp(temp, "k") == 0)
        value = 13;
    if (strcmp(temp, "A") == 0 || strcmp(temp, "a") == 0)
        value = 14;
    else
        value = int(*temp);

但是strcmp说它在读取我正在比较的字符串文字时出错。

EN

回答 4

Stack Overflow用户

发布于 2014-02-21 07:23:04

temp是一个指针,例如,"J"是一个由2个char组成的数组,可以转换为指向其第一个元素的指针。所以你是在比较两个指针。比较temp == "J"的意思是,“这两个C样式字符串的前几个字符是否具有相同的地址?”答案是否定的,他们没有。

要比较C样式的字符串,您应该使用strcmp。但是,在C++中更合适的方法是使用std::string,而不是C样式的字符串。

票数 3
EN

Stack Overflow用户

发布于 2014-02-21 07:24:33

替换:

代码语言:javascript
复制
char * temp = new char[size];
strcpy_s(temp, size, valued);

通过以下方式:

代码语言:javascript
复制
std::string temp(valued);

而且它会工作得更好-现在你正在比较字符串指针,而std::string实际上在操作符==上有一个重载,用于与你正在尝试的C风格的字符串进行比较。

票数 3
EN

Stack Overflow用户

发布于 2014-02-21 07:24:25

您在任何地方都没有在代码示例中使用字符串(std::string)!在c++中,"something"的正确术语是“字符数组文字”。你的意思是:

代码语言:javascript
复制
if (strcmp(temp,"J") == 0 // ...

否则,您只是比较字符指针(const char*),它不太可能与您的意思相匹配。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21921888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档