c++ - argv 中的字符串到整数

标签 c++ c++11 c++14 argv

我有一个程序,它从命令行获取输入并提前使用它们。一直以来,输入都是在调用命令之后单独给出的,例如 ./a.out 1 2 3 4 5 并且使用它们非常容易(让我们暂时将它们相加)-

#include <iostream>
#include <cstdlib>

int main(int argc, char **argv) {
    int sum = 0;
    for(int i = 1; i < argc; ++i) {
        sum += std::atoi(argv[i]);
    }
    std::cout << sum << std::endl;
}

但现在输入格式已更改为 ./a.out "1 2 3 4 5" 并且此方法无法正常工作。我试图将 "1 2 3 4 5" 转换为字符串,但我无法从中获取整数。我现在也想不出任何其他解决方案。有没有什么优雅的方法可以在不太复杂的情况下将它们从 argv 中取出?

最佳答案

您需要拆分字符串。例如,您可以使用字符串流来执行此操作:

#include <iostream>
#include <sstream>

int main(int argc, char **argv) {
    int sum = 0;
    for(int i = 1; i < argc; ++i) {
        std::istringstream iss(argv[i]);
        for (int n; iss >> n;) sum += n;
    }
    std::cout << sum << std::endl;
}

关于c++ - argv 中的字符串到整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551701/

相关文章:

c++ - 为什么 std::enable_if 需要第二种模板类型?

c++ - 使用 decltype 显式调用析构函数

c++ - 添加类后项目链接错误

c++ - C关键字/函数是否未包含在C++的std namespace 中?

C++ 时钟保持为零

c++ - 如何使用 boost::function 参数将 lambda 传递给重写方法?

c++ - 动态分配时将 C++11 对象添加到列表?

c++ - OpenCV 鼠标事件在鼠标滚动时总是接收事件 10 和 *flag* 0?

c++ - 如何将所有指针从一个 vector 移动到另一个 vector ?

c++ - 合并数字以形成一个大数字