Читайте строки из istringstream, без символа ‘\ r’ в конце

У меня есть следующая функция:

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?

Спасибо

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
}
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]