2016-04-24 27 views
-2

空白で区切られた文字列を、int型のベクトルまたは簡単にベクトルに変換できるものに変換する簡単な方法はありますか?数値の文字列をintベクトルに変換するC++

私は入力演算子(>>)を作成して、コマンドラインから入力された値を使用してバイナリツリーを作成しています。そして、これは私が午前問題は、私は私が必要な値を作成し、印刷することができますが、私はそれらを変換し、ベクターにそれらを置くことができないということです、それを

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

を行くそのメインである - そのため私は値からツリーを作成する作業定義メソッドを持っています。

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を使用して試してみましたが、それは常にスペースがエラーを起こした時はいつでもエラーが発生しました。

大変お手伝いいただきありがとうございます。重要な情報を見逃してしまった場合は、ごめんなさい。

+0

あなたがあなたの代わりにそれを残し、「//私はベクターに挿入値を挿入する必要がある場所」コメントでそのコードを置き換えるので、入力を変換しようとした方法を正確に示す必要があります。 stackoverflow.comはコード作成サービスではありません。誰もあなたのためにあなたのコードを書くことはありません。しかし、あなたが 'int'ベクトルへの入力を解析しようとしていて、それがうまく動かず、何が間違っているのか分からなければ、これは有効な質問でしょう。しかし、 "私のためのコードを書いてください"は有効な質問ではありません。 –

+0

文字列をベクトル型に変換する方法がある場合は、コードを記述するよう誰にも求めていません。参照用にコードを表示しているときに、非常に具体的なことを求めています。 – KL123

+0

それがあなたの質問なら、答えは "はい、道があります"です。 –

答えて

1

あなたはこれを行うことができます。

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

これはinから整数を読み込み、1行にvecすべてにそれらを挿入します。これは、標準ライブラリの一部であるistream_iteratorのかなり標準的な使用です。次に、各行を読み、それを自分で解析する必要はありません。

あなたは、これがどのように機能するかについての詳細を読みたい場合は、こちらをご覧ください:How does std::copy work with stream iterators

最初の引数を囲む括弧の余分なペアがあるように思われる理由については、それが原因で「最も厄介な解析」のです。 https://en.wikipedia.org/wiki/Most_vexing_parse - ちょっと奇妙なC++構文です。ソリューションを理解し少し楽

+0

私はそれをテストしていませんが、確かに私の例では私はstringstreamを使用しているので、彼らは文字として入力されint型ではないので動作しませんでしたか? – KL123

+0

@ KL123:いいえ、これがポイントです。 'istream_iterator 'は 'istream'(これは' stringstream'です)へのインターフェースであり、フォーマットされた抽出を 'int'に行っています。答えの中のリンクをクリックしてください。「これがどのように機能するかをもっと知りたい人は...」 –

+0

これはほとんど表現力のないコードです。上記のように。私はそれがC++が提供する最良のソリューションだから生産コードで書くだろうが、悲しいことにC++についてもっと多くのことが言える。 –

0

、私は(あまり簡潔なが)思う:

#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 << '\n'; 
    return 0; 
} 

あなたはcinを使用することができます同じようstringstreamを使用することができます。

http://ideone.com/Y6UfuW

+0

これは完璧に機能しました! – KL123

関連する問題