我正在使用getline来读取换行符的结尾,但是c ++ getline让我的东西直到空间,
我有txt文件数据
地址(tab char)1420 Happy Lane
当我这样做时
getline(读者,ss,'\ t')我在ss字符串中获取地址。 当我做getline(读者,ss,'\ n')我只得到1420。
我想要完整的“1420 Happy Lane”,如何获得它?
感谢。
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
int main( int argc, char *argv[] )
{
if( argc < 2 )
{
cout << "Missing filename as first argument" << "\n";
exit(2);
}
vector<string> myvector;
string ss;
int i=0, j=0;
ifstream reader(argv[1]);
if (! reader )
{
cout << "Error opening input file : " << " " << argv[1] << '\n';
return -1;
}
while( !reader.eof())
{
if ((i+1) % 2 == 0 )
getline(reader, ss, '\n');
else
getline(reader, ss, '\t');
if (ss[0] == '#')
{
//Skip
getline(reader,ss, '\n');i=0;
continue;
}
i++;
myvector.push_back(ss);
}
reader.close();
vector<string>::iterator it;
stringstream stream;
int vecloc=1;
string tag;
string sData;
cout << "myvector contains: \n";
for ( it=myvector.begin() ; it < myvector.end(); it++ )
{
switch (vecloc)
{
case 1: stream << *it; stream >> tag; vecloc++;break;
case 2:
stream << *it; stream >> sData;
// Do job
cout << tag << " " << sData << "\n";
// Reset.
vecloc=1; break;
default : break;
}
// Clear String stream
stream.str(""); stream.clear();
}
return(0);
}
输出
/家庭/ SR / UTL
cat abc.txt
嘿c ++让我疯了。
/家庭/ SR / UTL
a.out abc.txt
myvector包含:
嘿c ++
答案 0 :(得分:3)
粘贴编辑器中的实际代码,并仔细检查数据文件中是否有换行符(或其他意外的非打印字符)。
这符合预期:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
stringstream reader("address\t1420 Happy Lane\n");
string ss;
getline(reader, ss, '\t');
cout << "1: " << ss << endl;
getline(reader, ss, '\n');
cout << "2: " << ss << endl;
}
输出:
1: address
2: 1420 Happy Lane
答案 1 :(得分:0)
我有一个split()
功能,您可以使用它。使用\t
作为分隔符:
void split(std::string &string, std::vector<std::string> &tokens, const char &delim) {
std::string ea;
std::stringstream stream(string);
while(getline(stream, ea, delim))
tokens.push_back(ea);
}
答案 2 :(得分:0)
你试图在抓住直到\ t并且抓住直到\ n之间交替。但是你找到“#”注释行的时间会使你的选择失效。
到目前为止,处理此类问题的最简单,最强大的方法是首先读取每一行,然后重新解析该行。