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

Ben*_*Ben 23 c++

所以我试图检查我输入到程序中的参数,其中一个是"是"或"否",输入时没有引号.

我正在尝试测试等效性(if(argv [n] =="yes"))但是每当输入实际上是肯定时,它似乎返回false(当我输出它时它确认了这一点).我在这里错过了什么,我做得不正确?如果我理解正确argv [n]返回一个以null结尾的cstring,那么它应该允许我这样做.

Eri*_*rik 49

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

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
      }
  }

}
Run Code Online (Sandbox Code Playgroud)

  • 在使用“ std :: find”而不是“ vector”上的for循环的“简易模式”呢? (2认同)

Rio*_*iot 5

这是 std::string 的更好替代方案,当效率很重要时 - 在 C++17 中,您现在拥有非常有用的std::string_view。这使您可以使用类似于 std::string 的参数,而不会产生复制成本。

目前在 GCC 的 std::experimental 中可用:

#include <experimental/string_view>
...
if(std::experimental::string_view(argv[1]) == "yes") {
  // do things
}
Run Code Online (Sandbox Code Playgroud)