2017-08-27 10 views
-2

私は文字列のベクトルを構築しようとしていました。 一部の文字列にもSpacesが含まれています。 だから私はgetl​​ine(cin、string_name)を使っていたのです。私は入力文字列のベクトル(スペースを含む)を構築するには?

ADAM BOB JOHNSON 

を取っていたとき 私のコードは

 for(int i=0;i<n;++i) 
     { 
      getline(cin, s); 
      vec.push_back(s); 

     } 

のように見えるそれは、2つの入力の単語を取った後に停止し、表示されたベクトルの内容は、それが何を意味し

(HERE SPACE IS DISPLAYED)ADAM BOB 

です。最初の文字列の入力としてNULL文字列を取っていますか? 誰かが弦を持ってそれを表示する方法を教えてくれれば、本当に役に立ちます。ありがとうございます。

+0

どの言語がこれですか?と何らかのエラー?このエラーは何ですか? – Yazan

+3

[mcve]を入力してください。このコードスニペットで問題を再現することは不可能です – UnholySheep

+0

申し訳ありませんが、エラーはありませんでしたが、予期しない出力が出ていませんでした@Yazan –

答えて

0

Abhijit、 あなたの情報は明らかに十分ではありません。あなたのコードはC++で書かれていると仮定すると、私はこのテストCPP製:

​​

グラムでコンパイルを++、入力時に「ADAM BOB JOHNSON」という文字列でそれを供給しました。すべてが計画どおりに機能し、出力は入力とまったく同じでした。だから私はここでエラーを見ることができません。

申し訳ございませんが、これまでの評判が不十分なためコメントできません。


UPD:問題が見つかりました。 getlineは最初に '\ n'を取得し、 '3'の後に置いておく(std :: cin >> n;のために必要)ので、ただ一つの文字列を無視するだけでよい。コード:

#include <iostream> 
#include <vector> 
#include <string> 

int main() 
{ 
    int n; 
    std::cin >> n; 


    std::vector<std::string> vec; 
    std::string s; 
    std::getline(std::cin, s); 

    for(int i = 0; i < n; ++i) 
    { 
     std::getline(std::cin, s); 
     vec.push_back(s); 

     // std::cout << vec.at(i) << std::endl; 
    } 
    for(int i=0;i<n;++i){ 

     std::cout << vec[i] <<" " << std::endl; 
    } 




    return 0; 

} 

は私にとってうまくいきます。

また、@ pmaxim98が最初に作成しました。申し訳ありませんが、返信を編集していましたが、あなたのコメントは見られませんでした。

+0

はいループ内で正しく印刷されていますが、攪拌を押してから再びベーカー上を反復すると、3回目の攪拌が示されず、最初の位置にスペースが表示されます。 –

+0

ここに私が直面している問題があります:https://ideone.com/Ak5jDE –

+0

誰でも私をここでお手伝いできますか? –

関連する問題