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;
}
我有一个程序,它从命令行获取输入并提前使用它们。一直以来,输入都是在调用命令之后单独给出的,例如 ./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;
}