2013-04-28 26 views
1

我有如下功能:读线,结尾没有“ 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 -------------------- 当我在阅读窗口的相应行线将其与 '\ r' 端:

; -------- Special --------------------\r) 在Linux中没有 '\ R' 出现在末尾。 有没有一种方法可以一致地读取这些行,而无需区分它是linux还是windows?

感谢

+0

你是否可能以二进制模式打开了流? – jrok 2013-04-28 13:29:48

+0

std :: string str; //是一个参数std :: istringstream isaStream(str); //这样我打开stringstream – Yakov 2013-04-28 13:31:50

+1

你从哪里得到'str'的​​内容? (你可以张贴一些代码,你懂的) – jrok 2013-04-28 13:33:06

回答

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 
     } 
    } 
} 
+0

- 这是可以做到的 - 谢谢。但我更愿意调用一些内置函数来摆脱/忽略'\ r'char – Yakov 2013-04-28 13:46:16

+0

您可以将代码封装在一个函数中。编辑。 – Scintillo 2013-04-28 13:53:24