2012-04-29 70 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; 
}