从argv到整数的字符串

时间:2017-08-07 16:32:13

标签: 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中取出而不会过于复杂?

1 个答案:

答案 0 :(得分:4)

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

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