我错过了什么? GetLine函数(C ++)

时间:2010-10-07 01:12:08

标签: c++

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();

感谢您对此提出的任何建议,这是我正在努力的程序的一小部分代码。我只是想掩盖我的基础,因为我的教授用他自己的输入文件测试这个程序,我不知道他的输入文件是否会以空格结束。

3 个答案:

答案 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)

如果您知道inpost的长度相同,那么这是一个解决方案:

为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;
}