修复.txt文件中的文本

时间:2018-03-09 08:39:43

标签: c++ file fstream

我有一份家庭作业,我不知道如何开始。说明是有一个输入.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文件中输入/更改数据,所以我不知道从哪里开始。有没有办法解决它,所以它修复了任何不正确的输入文本,或者我是否必须手动更改此特定文本中的每个错误?没有必要为我解决它。一个例子或一些提示让我开始将非常感谢!

2 个答案:

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