use*_*819 6 c++ getline istringstream
我正在从文本文件中读取数据,并逐行使用std::getline.默认情况下,这会读取换行符\n.我的代码依赖于此.
然而,事实证明我必须处理可能在不同环境中生成的数据,即换行符是\r(Mac),\n(Unix)或\r\n(Windows)
是否有一个简单的解决方案,以便我可以做类似的事情
std::getline(data,str,'\r\n','\r','\n');
Run Code Online (Sandbox Code Playgroud)
但得到它首先寻找\r\n,然后\r和\n使之独立任何环境中生成它返回一个"行"?
或者更一般地说:std::getline对于任何类型的常用换行/回车,有没有办法用来返回"线"?
目前我所想出的就是
std::vector<int> size(3);
for (int i=0;i<3;i++){
data.open(c_string_file_name);
switch (i){
case 0: std::getline(data,str,'\r\n');size[0]=str.size();break;
case 1: std::getline(data,str,'\r');size[1]=str.size();break;
case 2: std::getline(data,str,'\n');size[2]=str.size();break;
}
data.close();
}
int min=std::min_element(size.begin(),size.end());
std::string delim;
switch (min){
case 0:delim='\r\n';break;
case 1:delim='\r';break;
case 2:delim='\n';break;
}
if ((size[0]==size[1])&&(min==1)){
delim='\r\n';
}
//rest of code use
std::getline(data,str,delim.c_str());
Run Code Online (Sandbox Code Playgroud)
基于以下假设:假设存在换行符,相关定界符将产生最短的"行".还要考虑这样一个事实,即如果它是一个分隔符\r,\r\n它将具有相同的长度字符串\r\n
| 归档时间: |
|
| 查看次数: |
12360 次 |
| 最近记录: |