我有以下功能:
void process (std::string str)
{
std::istringstream istream(str);
std::string line;
std::string specialStr("; -------- Special --------------------\r"); // win
//std::string specialStr("; -------- Special --------------------"); //linux
while (getline(istream,line))
{
if (strcmp(specialStr.c_str(), line.c_str()) != 0)
{
continue;
}
else
{
//special processing
}
}
}
我使用getline
逐行读取std :: istringstream中的行,直到我“遇到”特殊字符串
之后我应该为下一行做一些特殊的处理。
特殊字符串是:
; -------- Special --------------------
当我在windows中读取相应的行时,它以'\ r'结尾:
(; -------- Special --------------------\r
)
在Linux中,最后没有'\ r'出现。
有没有办法一致地读取行,而不区分是linux还是windows?
由于
答案 0 :(得分:1)
您可以使用以下代码从末尾删除'\ _ \ r':
if(line[line.length() - 1] == '\r') line = line.substr(0, line.length() - 1);
如果你想要,可以将它包装成一个函数:
std::istream& univGetline(std::istream& stream, std::string& line)
{
std::getline(stream, line);
if(line[line.length() - 1] == '\r') line = line.substr(0, line.length() - 1);
return stream;
}
集成到您的功能中:
void process (std::string str)
{
std::istringstream istream(str);
std::string line;
std::string specialStr("; -------- Special --------------------");
while (univGetline(istream,line))
{
if (strcmp(specialStr.c_str(), line.c_str()) != 0)
{
continue;
}
else
{
//special processing
}
}
}