string GetLine()
{
char parameter[26] = {NULL};
inFile.getline (parameter,26,' ');
return parameter;
}
现在我输入文件的示例如下所示:
〜in.txt〜
BAC BCA(最后一个A之后的空格)
〜结束文件〜
我必须在A之后拥有该空格,否则我的函数获取行将无效。有没有办法在A之后没有空间并且还能让它工作?
我有26,因为输入行最多只能包含26个字母。
我需要让它们像我一样分开,因为这就是我使用它的方式:
string in, post;
in = GetLine();
post = GetLine();
感谢您对此提出的任何建议,这是我正在努力的程序的一小部分代码。我只是想掩盖我的基础,因为我的教授用他自己的输入文件测试这个程序,我不知道他的输入文件是否会以空格结束。
答案 0 :(得分:3)
这是一种愚蠢的冗余功能,我不知道为什么你会把它称为“GetLine”,但是这里你去了:
string GetLine()
{
string s;
infile >> s;
return s;
}
答案 1 :(得分:2)
也许你应该只获得允许\ n作为分隔符的行,然后迭代并用空格标记化输入。
这样的事情是一种更聪明的方法:
ifstream file(filename);
string line;
if (file)
{
string token;
stringstream iss;
while ( getline(file, line) )
{
iss << line;
while ( getline(iss, token, ' ') )
{
cout << token << endl;
}
iss.clear();
}
}
EOF和getline相处得并不好,所以我在几个学期之前在网上发现了这个问题。
答案 2 :(得分:0)
如果您知道in
和post
的长度相同,那么这是一个解决方案:
为GetLine()提供一个char参数,比如delim,它确定分隔符。
string GetLine(char delim=' ')
并在getline调用中使用它:
inFile.getline (parameter,26,delim);
然后阅读这样的行:
string in, post;
in = GetLine(' ');
post = GetLine('\n');
修改强>
如果你不知道他们最后是否会留空,请使用:
string GetLine()
{
char parameter[26] = {NULL};
inFile.getline (parameter,26,' ');
string str = parameter;
if (str[str.length()-1]==' ') str.resize(str.length()-1);
return str;
}