我有一个程序,它从命令行获取输入并提前使用它们。所有这些输入都是在调用命令之后单独给出的,例如./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中取出而不会过于复杂?
答案 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;
}