2017-08-07 75 views
0

我有一个程序,正在从命令行输入并使用它们。这段时间的输入被调用命令如./a.out 1 2 3 4 5后分别给予,这是很容易使用它们(让刚刚总结他们的时刻) -从字符串到整数从argv

#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

(为什么参数格式改变就像一个教训了吗?)提示:要分割的空格字符的字符串数组落得您可以使用'atoi'转换的(字符串表示形式)数字。或者,您可以一次输入一个数字作为输入。 – struthersneil

+0

@struthersneil没有课程,我正在自学,另一个程序将下列输入传递给我的程序。 –

+0

这很酷,诚实地自我主导的实践和探究是唯一的学习方式。我只是好奇谁控制了输入。 – struthersneil

回答

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; 
} 
+0

[Demo](https://wandbox.org/permlink/L11xMfWXRKm1RjYW) –