2016-03-26 15 views
0

Bir ad listesinden başka bir şey içeren bir .txt dosyasından veri okumaya çalışıyorum. " "\" Sadece (string name = kullanarakC++ std :: getline sonuç dizesi, başka bir dizgeyi birleştirmeme izin vermiyor

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) 

Ben her satırı okumak için std :: getline fonksiyonunu kullanıyorum ve tırnak eklemek için çalışıyorum: Her isim için aşağıdaki yapmak istiyorum + satır + "\" "). Sorun, çizgi dizesinin sonuna bir şey eklediğimde hiçbir şey eklenmemesidir!

"dave 
"laura 
"owen 
"vick 
"amr" 

teşekkür çok teşekkür ederiz: Bu şu anda alıyorum çıkışı

dave 
laura 
owen 
vick 
amr 

: Bu benim girdi txt dosyası

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

geçerli:

Bu

benim kodudur çok!

+1

başka 'endl' ekle Eğer bu doğruysa o zaman çözüm satırın sonundaki r Char \ el kaldırmaktır test edilecek çıktı. Farklı satır sonu kuralları olan bir dosyayı okuduğunuz sistemden daha fazla olduğundan şüpheleniyorum. –

+1

Kodunuz bana göre iyi çalışıyor. Cout << çizgi << endl hakkında nasıl; cout << isim << endl; '? –

+1

Linux'ta çalışırsam ancak “input.txt” deki DOS satır sonu kurallarını kullanırsam, benzer görünür. Ekstra CR son terminale bir terminale en uzak solu koydu. – kec

cevap

1

getline, '\ n' kadar okurken giriş satırlarınızın \ r \ n ile bittiğini varsayalım.

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

[değiştir]

veya yerine pop_back():

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