2012-04-29 29 views
0
条件

可能重复:“是的,它的工作原理”
How do I properly compare strings in C?简单,如果用绳子

#include <iostream> 
using namespace std; 

int main(){ 

    char name[100]; 
    cout<<"Enter: "; 
    cin>>name; 
    if(name == "hello"){ 
     cout<<"Yes it works!"; 
    } 

    return 0; 
} 

为什么当我在我没有拿到提示符下输入打招呼信息?

+2

因为'name'不是一个字符串,它是一个字符数组。 – 2012-04-29 14:41:51

+3

使用'std :: string'!该代码易受缓冲区溢出的影响。如果你真的在使用C++,那么你就开始使用STL类。 – mfontanini 2012-04-29 14:49:13

回答

9

您需要使用strcmp来测试是否相等。

name是一个数组,而不是std::string,并且hello是一个字符串文字,即一个const char*。你在比较指针,而不是字符串。

+0

记住'strcmp'返回0,如果它们相等,所以不要使用'if(strcmp(name,“hello”))来比较' – chris 2012-04-29 14:43:32

+0

是的。但是现在我们应该告诉OP,尽管在C++中,name不是字符串,而是C中的字符串,并且比较仍然会失败。我们如何巧妙地做到这一点? – 2012-04-29 14:44:57

+0

@chris所有你需要的是额外'; else'。 – 2012-04-29 14:45:34

4

试试这个:

#include <string.h> 
#include <iostream> 
using namespace std; 

int main(){ 

    char name[100]; 
    cout<<"Enter: "; 
    cin>>name; 

    if(strcmp(name, "hello") == 0) { 
     cout << "Yes it works!"; 
    } 

    return 0; 
} 
+1

我不会鼓励人们使用C风格的方法,特别是在没有错误处理的情况下*(如果有人输入100个字母的输入,会发生什么?)另外,我要说如果有人要使用传统的C头文件,它应该是'#include '而不是'#include '......但是在试图找到一个参考文献时,我发现它并不像我一直被认为的那样简单:http://stackoverflow.com/questions/8380805/difference-between-string-h-and-cstring – HostileFork 2012-04-29 15:14:33

+0

你是对的。在阅读Bo Personsons的回答后,我宁愿推荐他的解决方案。 – Pedro 2012-04-29 15:19:16

1

有低级别的字符串不具备你有可能来自其他语言的期待高级别行为(“C字符串”)。当你在一个字符串类型(“报价”)要创建这些类型的字符串之一:

http://en.wikipedia.org/wiki/C_string_handling

在C++中,人们最先要做一个是通过低级别的字符串std::string的构造函数创建一个类的实例,该类具有更多您将习惯使用的界面中的便利。

http://www.cplusplus.com/reference/string/string/

因为C++是层叠在一个非常类似C的基础,它是有价值的理解C风格的字符串是如何工作的。同时,专业/惯用的C++程序不应该使用像strcmp这样的函数。对于一个有趣的研究为C的编程风格和C++编程风格之间的差异,检查了这一点:

Learning Standard C++ As A New Language (PDF)由Bjarne

3

如果使用std::string,而不是一个字符数组,它的工作:

#include <iostream> 
#include <string> 
using namespace std; 

int main(){ 

    string name; 
    cout<<"Enter: "; 
    cin>>name; 
    if(name == "hello"){ 
        cout<<"Yes it works!"; 
    } 

    return 0; 
}