使用向量按分隔符拆分字符串 - 如何按换行符拆分?

时间:2013-09-16 02:55:24

标签: c++ gcc csv

我有这样的功能(我发现它在某个地方,它适用于\t分隔符)。

vector<string> delimited_str_to_vector(string& str, string delimiter)
{
  vector<string> retVect;
  size_t pos = 0;

  while(str.substr(pos).find(delimiter) != string::npos)
  {
    retVect.push_back(str.substr(pos, str.substr(pos).find(delimiter))); 
    pos += str.substr(pos).find(delimiter) + delimiter.size(); 
  }

  retVect.push_back(str.substr(pos));

  return retVect;
}

我遇到了将字符串拆分为&#34; \ r \ n&#34;分隔符。我做错了什么?

string data = get_file_contents("csvfile.txt");
vector<string> csvRows = delimited_str_to_vector(data, "\r\n");

我确定,我的文件使用CRLF表示新行。

2 个答案:

答案 0 :(得分:2)

您可以使用getline逐行读取文件,其中包含:

  

从is中提取字符并将它们存储到str中,直到找到分隔字符delim(或换行符,'\ n'...)如果找到分隔符,则将其提取并丢弃,即不存储并且下一个输入操作将在它之后开始。

也许您已经通过删除行结尾的函数读取文件。

答案 1 :(得分:1)

如果您以文本模式打开文件,即您没有提及std::ios_base::binary(或其中一个备用拼写),系统特定的行结束序列可能会被{{1}替换}字符。也就是说,即使您的源文件使用\n,您在阅读文件时也可能看不到此字符序列。如果您真的想要处理这些序列,请在打开文件时添加\r\n标志。