2016-03-26 18 views
0

名前のリストだけを含む.txtファイルからデータを読み取ろうとしています。 「「\」単に(文字列名を=使用してC++ std :: getline結果文字列で別の文字列を連結することはできません

1) read a name and store it in a string variable. 
2) Add quotes to the name ("name") 
3) make a map entry using each name (map["name"]= x) 

私はそれぞれの行を読み取るためのstd :: getline関数を使用していますが、私は引用符を追加しようとしている:私は、それぞれの名前のために次の操作を実行したいです+ライン+ "\" ")。 問題は、行文字列の最後に何かを追加するたびに、何も追加されないということです!

これは私のコードです:

#include <iostream> 
#include <string> 
#include <map> 
#include <fstream> 
#include <stdlib.h> 

using namespace std; 

int main(){ 
    ifstream reader("input.txt"); 
    string line; 
    string name; 
    map<string,int> arr; 
    int np=5; 
    for(int i=0;i<np;i++){ 
     getline(reader,line); 
     name="\"" +line +"\""; 
     cout<< name << endl; 
    } 
    return 0; 
} 

これは、ファイルtxtの私の入力です:

dave 
laura 
owen 
vick 
amr 

これは私が現在取得しています出力されます:

"dave 
"laura 
"owen 
"vick 
"amr" 

は、非常にありがとう多く!

+1

に別の 'endl'を追加テストする出力。あなたが読んでいるシステムよりも行末の規則が違うファイルがあると思われます。 –

+1

あなたのコードは私によってうまく動作します。どうか 'cout << line << endl; cout << name << endl; '? –

+1

Linuxで走っていて、 'input.txt'にDOS行末の規則を使用している場合、それは似ています。余分なCRは最後の二重引用符を端末の一番左に置きます。 – kec

答えて

1

あなたの入力行は\ r \ nで終わり、getlineは '\ n'まで読むとします。それが本当であれば、解決策は、行の末尾にRの文字\手動で削除することです:

getline(reader,line); 
line.pop_back(); 

[編集]

または代わりのpop_back()

auto cr_pos = line.rfind('\r'); 
if (cr_pos != std::string::npos) 
    line = line.substr(0, cr_pos);