如何比较用户输入(从std :: cin)到字符串?

时间:2016-09-12 02:14:40

标签: c++ string comparison

所以这个听起来很容易,但我得到一些奇怪的行为。

在我的程序中有以下代码:

std::cout << "Would you like to generate a complexity graph or calculate global complexity? (graph/global)\n";
char ans[6];
std::cin >> ans;

if (ans != "global") std::cout << ">>" << ans << "<<" << std::endl;

当我运行程序并在提示输入时键入“global”时,程序返回:

>>global<<

为什么if语句的评估结果为true

2 个答案:

答案 0 :(得分:3)

  1. 您应该使用strcmpstrncmp来比较c风格的字符串。 ans != "global"只是比较指针指向的内存地址,而不是字符串的内容。

  2. char ans[6];应为char ans[7];,对于"global",您还需要一个char来终止空字符'\0'

  3. 您应该使用std::string来避免此类问题。

答案 1 :(得分:0)

您将ans声明为char数组,因此如果if (ans != "global")表达式,ans表示指向字符串开头的指针。所以你比较两个显然不相等的指针,你的表达式求值为true。如果您仍想将ans声明为C风格的字符串,则可以在比较之前从中构造std::string

if (std::string(ans) != "global") {......}

或者只需将ans声明为std::string而不是char[]