方法很多,
① 可以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和回车吗? 还有其他的字符?