У меня есть следующая функция:
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
}
}
}
Я читаю строки из std :: istringstream построчно, используя getline
До тех пор, пока я не «встретить» специальную строку
после чего я должен сделать некоторую специальную обработку для следующих строк.
Специальная строка:
; -------- Special --------------------
Когда я читаю соответствующую строку строки в Windows, она заканчивается на «\ r»:
(; -------- Special --------------------\r
)
В Linux нет «\ r» в конце.
Есть ли способ читать строки последовательно, без различия, если это Linux или Windows?
Спасибо
Вы можете удалить ‘\ 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
}
}
}
Других решений пока нет …