1

我有这样的功能(我在某处找到它,它与\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;
}

我在用“\r\n”分隔符分割字符串时遇到问题。我究竟做错了什么?

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

我敢肯定,我的文件用于CRLF换行。

4

2 回答 2

2

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

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

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

于 2013-09-16T03:01:11.570 回答
1

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

于 2013-09-16T03:00:51.323 回答