上下文:这是一个“课程”的练习,其中我收到了一个包含 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
?
代码是错误的,因为我没有使用
来代替吗?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;
}