首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据字符串检查argv[]?(C++)

根据字符串检查argv[]?(C++)
EN

Stack Overflow用户
提问于 2011-03-04 00:00:01
回答 4查看 47.6K关注 0票数 32

所以我尝试检查我在程序中输入的参数,其中一个是单词"yes“或"no",输入时没有引号。

我正在尝试测试等价性( if (argvn == "yes") ),但似乎每次输入为yes时都返回false (当我输出它时证实了这一点)。我在这里错过了什么,我做得不对吗?如果我理解正确的话,argvn会返回一个以null结尾的cstring,所以它应该允许我这样做。

EN

回答 4

Stack Overflow用户

发布于 2011-03-04 00:01:05

你在比较指针。使用strcmp或std::string。

代码语言:javascript
复制
int main(int argc, char * argv[]) {

  if (argv[1] == "yes"); // Wrong, compares two pointers
  if (strcmp(argv[1], "yes") == 0); // This compares what the pointers point to
  if (std::string(argv[1]) == "yes"); // Works fine
  if (argv[1] == std::string("yes")); // Works fine

  // Easy-mode    
  std::vector<std::string> args(argv, argv+argc);
  for (size_t i = 1; i < args.size(); ++i) {
      if (args[i] == "yes") {
          // do something
      }
  }

}
票数 67
EN

Stack Overflow用户

发布于 2017-03-18 02:36:06

这里有一个比std::string更好的选择,当效率很重要的时候--在C++17中,你现在有了非常有用的std::string_view。这使您可以使用类似于std::string的参数,而不会产生复制成本。

目前在std::experimental中提供,在GCC:

代码语言:javascript
复制
#include <experimental/string_view>
...
if(std::experimental::string_view(argv[1]) == "yes") {
  // do things
}
票数 5
EN

Stack Overflow用户

发布于 2011-03-04 00:03:39

代码语言:javascript
复制
if(strcmp(argv[0],"yes")==0) { // equal to "yes"

如果两个字符串相同,则strcmp为零。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5183203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档