2012-12-22 49 views
4
#include <iostream> 

using namespace std; 

int main(int argc,char* argv[]){ 
    if(argv[1] == ""){ 
     cout << "please put something" << endl; 
    }else if(argv[1] == "string"){ 
     cout << "yeah string" << endl; 
    }else if(argv[1] == "integer"){ 
     cout << "yeah integer" << endl; 
    } 
} 

我不知道什麼是錯的更多信息:我嘗試檢查如果argv的提供的參數[1]是空的,所以這將是false和應用程序將退出,所以請告訴我我的代碼有什麼問題。檢查參數爲空或不相同

+0

您是否知道'strcmp'和'strlen'? –

+0

我是新來的C++世界,所以沒有太多的信息我知道關於函數在C++中,大部分時間我在我的編碼中使用PHP,但現在我打算學習C++ .. –

+2

哦,我的印象是你是AC程序員轉向C++,但沒有。因此,請抓住我的第一條評論不要學習'strcpy'&'strlen'學習'std :: string'。 :) –

回答

7

每個人都給你一個不同的答案。事實上,每個人都是對的。

主要的簽名,int main(int argc, char *argv[])從C繼承。 在C字符串中是指向char的指針。當你對他們的使用操作==,你想比較指針值。

的C方法來比較字符串的內容是使用strcmp

if (strcmp(argv[1], "integer") == 0){ 

它是更安全和更容易做到這一點的C + +方式。

if (std::string(argv[1]) == "integer"){ 

這條線從argv[1]創建一個臨時的std :: string。你必須包括string這個工作。

最後檢查argc == 2是否知道是否提供了參數。 這是事實的argv爲null由standard 3.6.1終止,但它絕對 讓事情更清晰檢查的argv確實等於2

+1

所以我們需要將字符串轉換成字符串之前,我們做比較,謝謝你的好例子和答案.. :) –

3

如果你想在C++編寫代碼,你可以使用std::string,包括它的頭:

#include <string> 

轉換的第一個參數std::string和使用其operator==:中char *

std::string first = argv[1]; 

if(first == ""){ 
    cout << "please put something" << endl; 
}else if(first == "string"){ 
    cout << "yeah string" << endl; 
}else if(first == "integer"){ 
    cout << "yeah integer" << endl; 
} 

比較文字是沒有意義的,如果你從argv[1]中得到std::string,那麼它是一個不同的故事,它會按照你的預期工作。

但是,你應該由用戶首先要檢查的提供給程序的參數個數,它在argc

+0

我以爲argv [1]是字符串(因爲結果是字符串),但現在我知道它,謝謝.. :) –

1

首先檢查是否ARGC> 1。否則,你所訪問無效的內存。

if(argc < 2){ 
    cout << "please put something" << endl; 
}else if(argv[1] == "string"){ 
    cout << "yeah string" << endl; 
}else if(argv[1] == "integer"){ 
    cout << "yeah integer" << endl; 
} 
+2

「否則,您正在訪問無效的內存。」 - 不,因爲'argv'以NULL結尾 - 即使沒有參數,'argv [1]'是有效的,它只是'NULL'。 – 2012-12-22 11:09:01

+0

所以如果我讓字符串(argv [1])== NULL它是有道理的或不? –

+0

(string(argv [1])== NULL)與(argc <2)完全相同。原因是在標準C中,argv數組的最後一個值始終爲NULL。這是隻要你的編譯器實現標準... – grebulon

3

無法爲的argv [],因爲它是char*類型,使用STRCMP使用==代替。

int main(int argc, char*argv[]) 
{ 
    if(argc == 1){ 
     cout << "please put something" << endl; 
    }else if(strcmp(argv[1], "string") == 0){ 
     cout << "yeah string" << endl; 
    }else if (strcmp(argv[1], "integer") == 0){ 
     cout << "yeah integer" << endl; 
    } 
    return 0; 
} 

或者你需要做的argv副本[1]到的std :: string那麼你可以使用==操作。

+0

關於strcmp函數的很好的例子,謝謝:) –

0
  #include <string> 
     #include <iostream> 

這將使用C++方式來比較字符串。更安全的方式。 轉換的第一個參數的std :: string,然後用字符串::比較功能

  std::string inString = argv[1]; 

      if(inString.compare("") != 0) 
      { 
      std::cout << "please put something in" << std::endl; 
      } 
      else if(inString.compare("string") == 0){ 
      std::cout << "yeah you got a string" << std::endl; 
      } 
      else if(inString.compare("integer") == 0) 
      { 
      std::cout << "yeah you got an integer" << std::endl; 
      } 

注:用繩子::(字符串或指向字符串的指針)比較看這個函數引用。字符串與你正在比較的內容之間的關係:

0他們比較相等。如果比較產生< 0,則不匹配的第一個字符的值在比較字符串中較低,或者所有比較的字符匹配,但比較的字符串較短。如果> 0,則比較字符串中不匹配的第一個字符的值較大,或者所有比較的字符匹配,但比較的字符串較長。