我有一份家庭作业,我不知道如何开始。说明是有一个输入.txt文件,其中包含一些包含错误的文本。我必须在输出.txt文件中修复它,这意味着,单词之间只有1个空格,逗号/标点符号前面没有空格,后面只有1个空格。句子开头的大写字母。它还说我不必使用ASCII表,因为大写字母是在小写字母之前编码的?
输入文字示例:
jaMEs , mY neIgHBor , Is A dOcTor . he SPoke eaSIlY , CLEarly And eloQuENtly.
输出:
James, my neighbor, is a doctor. He spoke easily, clearly and eloquently.
我们在课堂上所做的就是检查ifstream / ofstream并在.txt文件中输入/更改数据,所以我不知道从哪里开始。有没有办法解决它,所以它修复了任何不正确的输入文本,或者我是否必须手动更改此特定文本中的每个错误?没有必要为我解决它。一个例子或一些提示让我开始将非常感谢!
答案 0 :(得分:1)
将问题分解成碎片。首先,从文件中读取数据。存储它你想要的,可能是一个字符串,然后继续下一部分。检查每个字符,看它是否正确。如果是,继续前进。如果没有,请将其更正,然后继续。当您点击输入结束时,您就完成了 要检查一个字符是否正确,你只需要检查它是否是小写,如果它应该是一个字符。如果它应该是和不是,修复它,否则继续前进。
答案 1 :(得分:0)
在阅读时检查每个角色。如果它是一个完整的停止,那么请记住提升下一个字母数字,否则将其缩写。如果它是一个空间,那么请记住你已经看过一个空格 - 不要打印它直到你看到一个单词字符。
类似的东西:
#include <algorithm>
#include <cctype>
#include <iostream>
#include <iterator>
int main()
{
int(*t)(int) = std::toupper;
char const*last = "";
std::for_each(std::istreambuf_iterator<char>{std::cin},
std::istreambuf_iterator<char>{},
[&](char c){if(std::isspace(c))last=" ";
else if(std::isalnum(c=t(c)))std::cout<<last<<c,last="",t=std::tolower;
else if(c==',')std::cout<<c,last=" ";
else if(c=='.')std::cout<<c,last=" ",t=std::toupper;});
}