从 getline 与 cin >> 字符串中分隔空格

问题描述 投票:0回答:1

上下文:这是一个“课程”的练习,其中我收到了一个包含 ASCII 数字的文件,并被告知将 ASCII 数字解码为单词。每个单词写成一行,每个 ASCII 字母之间用空格分隔。 示例:

107 97 119 97
112 105 101 115
100 111 109

在终端中,它确实返回了解码后的单词,但我的代码被标记为不正确,一位课程管理员告诉我在主函数中使用

file >> line
而不是
(getline(file, line))
,之后另一位管理员告诉我使用
(getline(file, line))
,我的代码已经有...我无法获得任何对我有帮助的反馈,所以我想在这里提问。使用
getline
是否效率低下,
file >> line
是否理想?当
file >> line
不接受空白字符时,如何将解码后的单词分成单独的行?

#include <iostream>
#include <fstream>
using namespace std;

int stringToInt(string numberSet)
{
    int position = 1;
    int number = 0;

    for (int i = numberSet.length() - 1; i >= 0; i--)
    {
        number = number + (numberSet[i] - 48) * position;
        position = position * 10;
    }
    return number;
}

string convertToWord(string line)
{
    string numberSet = "";
    string word = "";
    int number;

    for (int i = 0; i < line.length(); i++)
    {
        if (line[i] != ' ' && line[i] != '/n')
        {
            numberSet = numberSet + line[i];
        }
        else
        {
            number = stringToInt(numberSet);
            char letter = number;
            word = word + letter;

            numberSet = "";
        }
    }

    number = stringToInt(numberSet);
    char letter = number;
    word = word + letter;

    return word;
}

int main()
{
    ifstream file;
    ofstream result;
    file.open("slowa1.txt");
    result.open("wyniki2.txt");

    string line;
    bool isEmpty = true;

    while (getline(file, line))
    {
        isEmpty = false;
        cout << convertToWord(line) << endl;
        result << convertToWord(line) << endl;
    }

    if (isEmpty)
    {
        cout << "No solutions" << endl;
        result << "No solutions" << endl;
    }

    file.close();
    result.close();
    return 0;
}

我最初在 main 函数中使用

(getline(file, line))
,但被告知这是错误的,没有进一步的上下文。对于上面的示例输入,我的代码返回了

kawa
pies
dom

代码是错误的,因为我没有使用

file >> line
来代替吗?如何使用
file >> line
在每个单词后面添加 '/n' 或 endl,这样输出就不会变成没有空格的
kawapiesdom

c++ fstream getline
1个回答
0
投票

代码是错误的,因为我没有使用

file >> line
来代替吗?

我们无法知道评分方案,但鉴于课程管理员不同意,我建议不是。您肯定已经注意到

file >> line
相对于
getline(file, line)
的问题,并且在这种情况下它没有任何好处。

可能被标记为不正确的是您的

stringToInt
convertToWord
函数,可以使用
std::stringstream

来简化它们
string convertToWord(stringstream in)
{
    string word;
    int letter;

    while(in >> letter)
    {
        word.push_back(static_cast<char>(letter));
    }

    return word;
}
© www.soinside.com 2019 - 2024. All rights reserved.