C++ 用string读一个txt文件,文件的里的内容用tab,回车或者空格隔开。

如:内容一tab内容二空格内容三回车内容四,希望在读取的时候,只有tab和回车起到分割内容的作用,而把空格看做内容本身,不起作用。也就是希望file>>string的时候,能够获得内容一,内容二 内容三,内容四。怎么实现?

方法很多,
① 可以c的函数strtok,可以一次搞定;问题是这个函数需要拷贝原字符串,因为它要破坏字符串,如果文本文件大,效率就会低; 而且是线程不安全的。
② 可以使用boost::tokenizer, 很方便, 不过需要按照第3方的boost库;
③ 也可以用pcre的正则库, 也很好用;
④ 自己写一个, string, STL的; 下面是用stringstream的一个实现,结合了std:getline()。因为你这个例子,其实回车是getline自动考虑了, 只要定义“\t”(tab制表符)即可。
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
ifstream ifs("data.txt");
string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
//cout << str.c_str() << endl;

stringstream ss(str);
string s;
while (getline (ss,s,'\t'))
{
cout << s << endl;
}
return 0;
}
注意: 这个文件的字符是char, 如果是unicode的文件, 用wchar_t替换char。追问

谢谢!这个文件是UTF-8编码的,很多符号都判断不出来。这个应该怎么办呢?

追答

不就是tab和回车吗? 还有其他的字符?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-15
你好!
记得有个函数是按行读取
然后可以设置分隔符的那种。。。。忘记了
希望对你有所帮助,望采纳。
第2个回答  2012-10-19
记得有个函数是按行读取 然后可以设置分隔符的那种。。。。忘记了
相似回答