将一串数字转换为int向量c ++

Converting a string of numbers into an int vector c++

有没有一种简单的方法可以将一个由空格分隔的数字串转换成一个整数向量,或者我可以很容易地将它转换成一个向量?

我正在创建一个输入操作符(>>)来使用命令行中的值来生成二叉树。这是它的主要部分

1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char **argv)
{
stringstream stream;
stream <<" 10" <<" 11" <<" 10" <<" 2" << endl;
tree = new binary_tree();
stream >> *tree;
if (tree->inorder() != string("7 10 11")) //inorder() prints the tree in order
cout <<"Test passed" << endl;
delete tree;

return 0;
}

我面临的问题是,虽然我可以创建和打印我需要的值,但我不能转换它们并将它们放入一个向量中——为此,我有一个工作定义的方法,可以根据这些值创建一个树。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
std::istream& operator>>(std::istream &in, binary_tree &value)
{
vector<int> input_tree;
string readline;    
getline(in, readline);
cout <<"(" << readline <<")" << endl; //prints correctly - (10 11 10 2)

    //where I need to insert insert values into vector

for(int i = 0; i < input_tree.size(); i++)
{
    insert(input_tree[i], value);    //inserts the values from a vector into a binary tree
}

return in;  
}

我试过在字符串中循环并对每个字符使用stoi(),但是每当空格引起错误时,它总是出错。

谢谢你的帮助,如果我遗漏了任何重要的信息,我很抱歉。


您可以这样做:

1
vector<int> vec((istream_iterator<int>(in)), istream_iterator<int>());

这将从in中读取整数,并将它们全部插入到vec中。这是标准库中istream_iterator的一个非常典型的用法。然后,您不需要阅读每一行并自己分析它。

如果您想了解更多关于这是如何工作的,请参见:STD:如何:用流迭代器复制工作

至于为什么在第一个参数周围出现一对额外的圆括号,那是因为"最麻烦的解析":HTTPS://E.WiKiTo.Org/Wiki/MistyVxIGIN PARSE——只是C++语法的一个愚蠢的怪癖。


我认为解决方案更容易理解(虽然不那么简洁):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string s="4 5 6";
    stringstream ss(s);
    vector<int> v;

    int hlp;
    while(ss >> hlp)
    {
        v.push_back(hlp);
    }

    for(auto i: v)
        cout << i << '
'
;
    return 0;
}

您可以使用stringstream,就像使用cin一样。

网址:http://ideone.com/y6ufuw