2012-12-22 50 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,则比较字符串中不匹配的第一个字符的值较大,或者所有比较的字符匹配,但比较的字符串较长。