如何读取具有特定格式的行)C++
how to read a line with an specific format) c++
我在 c++ 中读取txt
文件时遇到问题。
该文件由行组成,每行有 4 位数字,代表年份(例如 1900 年)和用"#"分隔的电影标题。
文件的格式为:编号#电影标题#电影标题#电影标题
线条示例:
1900#福尔摩斯困惑#魔法画
1904#不可能的航行
1918#斯特拉·马里斯#米奇#流沙#狗的生活#肩臂
我想读取每一行,将年份保存在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;字符串
这种函数呢:
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) );
}
它返回像缓冲区一样的向量 = [1918, Stella Maris, ....],对于 txt 读数
ifstream f( path );
string line;
while (getline (f,line) ){
// goes line by line, return line as string
}
f.close()
在你的
代码中is.ignore('#');
是错误的。看这里。所以使用如下
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;
}
}
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 如何将strftime中的格式错误作为异常捕获
- 将CHW格式的浮点向量转换为cv::Mat
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 如何以叮当格式设置评论的行长?
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- Vulkan 中的动态顶点缓冲区格式设置