argv 中的字符串到整数

string to integers from 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;
}