我在阅读c ++中的txt
文件时遇到了问题。
该文件由行组成,每行包含4个数字,代表一年(例如1900),电影标题用'#'分隔。
文件格式为: 编号#电影标题#电影标题#电影标题
行的例子:
1900 #Sherlock Holmes感到困惑#The Enchanted Drawing
1904年#The Impossible Voyage
1918#Stella Maris #Mickey #Shifting Sands #A Dog's Life#Shoulder Arms
我想阅读每一行,将年份保存在int
变量中,将每个电影标题保存在字符串数组中。请帮忙。
这是我的(错误)代码:
istream& operator >>(istream &is, Cronologia &crono){
FechaHistorica fh;
int anio;
while(!is.eof()){
char c[1024];
char aux[4];
is.read(aux,4);
is.ignore('#');
anio = atoi(aux);
fh.setAnio(anio);
cout << "\n" << anio << endl;
while(is.getline(c,1024,'#')){
fh.aniadeEventoHistorico(c);
}
}
return is;
}
FechaHistorica由以下人员组成: int n; 字符串数组
答案 0 :(得分:0)
这种功能怎么样:
string test="1918#Stella Maris#Mickey#Shifting Sands";
vector<string> buffer;
size_t found = 0;
while ( found <= test.size() ){
found = test.find('#')
buffer.push_back(test.substr(0, found) );
test.erase(test.begin(), test.begin()+(found+1) );
}
它返回像buffer = [1918,Stella Maris,....]这样的矢量,以及txt读数
ifstream f( path );
string line;
while (getline (f,line) ){
// goes line by line, return line as string
}
f.close()
答案 1 :(得分:0)
在您的代码中is.ignore('#');
是错误的。见here。所以使用如下
if (iss.peek() == '#') {
iss.ignore();
}
最后while(is.getline(c,1024,'#')){
将不会在文件结束前结束。所以我想,你首先阅读整行,然后像下面那样处理它。
string line;
while(getline(is, line)){
istringstream iss(line);
char c[1024];
char aux[4];
iss.read(aux,4);
if (iss.peek() == '#') {
iss.ignore();
}
anio = atoi(aux);
fh.setAnio(anio);
cout << "\n" << anio << endl;
while(iss.getline(c,1024,'#')){
cout << c << endl;
}
}