所以我试图检查我输入到程序中的参数,其中一个是"是"或"否",输入时没有引号.
我正在尝试测试等效性(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::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)
| 归档时间: |
|
| 查看次数: |
34896 次 |
| 最近记录: |