strcmp()没有正确比较字符串的问题

时间:2013-09-28 22:10:47

标签: c++ string comparison string-comparison strcmp

这是实际的代码,因为它似乎特定于此处。

#include <iostream>
#include <string.h>

using namespace std;

int main()

cout << "  Just say \"Ready\" when you want to start.";
char tempReady[20];
cin >> tempReady;
length = strlen(tempReady);
char* ready = new char[length+1];
strcpy(ready, tempReady);
while((strcmp(ready, "Ready")||strcmp(ready, "ready"))!=0)
   {
   cout << "Try again.";
   cin >> tempReady;
   length = strlen(tempReady);
   delete[] ready;
   ready = new char[length+1];
   strcpy(ready, tempReady);
   }
cout << "Success";

有人看错了吗?

3 个答案:

答案 0 :(得分:3)

C风格的方法:

char str[256];
if (scanf("%255s", str) == 1 && strcmp(str, "hello") == 0) {
    printf("success");
}

C ++方法:

std::string str;
if (std::cin >> str && str == "hello") {
    std::cout << "success";
}

现在决定是否要用C或C ++编写代码,只需 不要混合

答案 1 :(得分:2)

while((strcmp(ready, "Ready")||strcmp(ready, "ready"))!=0)

应该是

while(strcmp(ready, "Ready") != 0 && strcmp(ready, "ready") != 0)

你写的版本永远都是真的。

答案 2 :(得分:1)

以下是如何进行一些基本调试,例如准确检查输入内容。

using namespace std; 

char* string = new char[6];
cin >> string;

for(int i=0; i<6; ++i)
{
    printf("[%d]: Hex: 0x%x;  Char: %c\n", i, string[i], string[i]);
}

while(strcmp(string, "hello")==0)
{
   cout << "success!";
}

我怀疑您的输入不是hello,(例如hello\nhello\r\n,或者甚至是( unicode ){{1 }},这使hello失败。

但不是我猜测,你可以使用上面的简单strcmp检查自己。

如果您可以使用输入的确切十六进制转储返回,并说明printf 仍然 无法按预期工作,那么我们'我有值得研究的东西。