将 char * 与字符串文本进行比较时出现问题
Problems comparing char * to a string literal
我正在为一个类项目开发Go Fish。在此代码中,我尝试从播放器中获取卡片的面值并将其转换为其整数值(2 - 10,J=10,Q = 11...)
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
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说它在读取我正在比较的字符串文字时出错。
temp
是一个指针,例如,"J"
是一个 2 个char
的数组,可以转换为指向其第一个元素的指针。所以你正在比较两个指针。temp == "J"
的比较意味着,"这两个 C 样式字符串中的第一个字符是否具有相同的地址?答案是否定的,他们没有。
要比较 C 样式字符串,应使用 strcmp
。但是,C++中更合适的方法是使用 std::string
而不是 C 样式的字符串。
替换:
char * temp = new char[size];
strcpy_s(temp, size, valued);
跟:
std::string temp(valued);
而且它会更好地工作 - 现在您正在比较字符串指针,而std::string
实际上在运算符==
上过载,以便在您尝试时与 C 样式字符串进行比较。
您没有在任何地方的代码示例中使用字符串(std::string
)!在 c++ 中,"something"
的正确术语是"字符数组文字"。你的意思是:
if (strcmp(temp,"J") == 0 // ...
否则,您只是在比较字符指针(const char*
),whch不太可能与您的意思相匹配。
== 比较字符串的地址,而不是内容。你需要使用类似strcmp的东西
相关文章:
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- std::max() 函数与定点实现的比较中的问题
- C++复杂情况的比较器通过参数问题
- 这种比较是否不一致(或者存在其他问题)?
- 将此类数据作为字符串进行比较时出现问题
- 关于没有比较的条件的问题
- 通过比较字符设置字符串时出现问题
- 无符号int的比较始终是正确的(NPOS问题?)
- 比较两个字符的问题
- (C++) 学习向量 - 编码/输入流终止/比较向量的问题
- C++ lower_bound比较功能问题
- 比较答案键(C )的字符串的问题
- C++ std:字符串比较编纂问题
- 比较字符串(arduino)时出现问题
- 将 char * 与字符串文本进行比较时出现问题
- 排序功能不起作用(字符串比较问题)
- 比较c++问题中的两个字符串
- 检查功能比较问题
- C++模板的误用或编译器字符串与模板的文字比较问题