从istringstream读取行,最后不带'\ r'char

时间:2013-04-28 13:26:10

标签: c++ getline istringstream

我有以下功能:

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?

由于

1 个答案:

答案 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
      }
    }
}