句子转换器在存在新行的情况下不起作用
Sentence converter not working in the presence of new line
我正在尝试编写一个询问用户两个文件名的程序。第一个文件将打开以进行输入,第二个文件将打开以进行输出。(可以假定第一个文件包含以一段时间结尾的句子。(程序将读取第一个文件的内容,并将所有字母更改为小写大写。修订后的内容应存储在第二个文件中。
我能够使代码正常工作,但是在线之间的突破很大:
之间。我的输入:https://i.stack.imgur.com/iygwt.jpg
这是input.txt
的文本C 是Bell Labs的Bjarne Stroustrup开发的"高级编程语言"。它有助于优化资源并通过网络支持多人游戏选项。Google的主页包含一个标有我很幸运的按钮。当用户键入搜索并单击按钮时,用户将直接将用户绕过第一个搜索结果,绕过搜索引擎结果页面。
您会注意到output.txt中的行之间的不必要的空间。我不知道为什么会这样输出。
我试图弄乱我的循环,但我似乎无法调试这个问题
#include <algorithm>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
char ch;
string inputNAME, outputNAME;
string line;
cout << "Please enter the filename for INPUT file: ";
cin >> inputNAME;
cout << "Please enter the filename for OUTPUT file: ";
cin >> outputNAME;
fstream inFile, outFile;
当" input.txt"之间没有断裂,因为每个句子都没有分开,我的代码在句子之间没有断裂。但是,当句子之间存在断裂时,它不再正确转换。
最终目标是使我的输出文件看起来像:(请注意,转换后的句子之间没有断裂(
getline(inFile, string, '.')
将读取所有文本到第一个'.'
。给定输入,string
将包含
C 是Bell Labs的Bjarne Stroustrup开发的"高级编程语言">
和
它有助于优化资源并通过网络支持多人游戏选项。Google的主页包含一个标有我很幸运的按钮。当用户键入搜索并单击按钮时,用户将直接将用户绕过第一个搜索结果,绕过搜索引擎结果页面。
将保留在流中。注意开始在流中剩下的数据的线路结束。这是您的错误的一部分。
string
将与'.'
和线路结束一起写入文件。
下一个致getline
的呼叫将读取
它有助于优化资源并通过网络支持多人游戏选项。
进入string
。看到线字符的结尾吗?它将被写入文件。现在您有两端的线路。糟糕。
解决方案:
不要手动添加线路的结尾。更改
outFile << line << "." << endl;
to
outFile << line << ".";
如果您觉得需要完成endl
。
flush
。首先从文件中提取整个行,然后在下一个循环中,解析定界符'。'。
while (getline(inFile, string))
{
stringstream sstream{ string };
while (getline(sstream, string, '.')) {
transform(string.begin(), string.end(), string.begin(), ::tolower);
int i = 0;
bool contains_alpha
= std::find_if(string.begin(), string.end(), [&i](char c) { i++; return std::isalpha(c); }) != string.end();
if (!contains_alpha) continue;
string[i - 1] = toupper(string[i - 1]);
cout << string << ".";
outFile << string << ".";
}
cout << endl;
outFile << endl;
}
相关文章:
- G++ C++17 类模板参数推导在非常特殊的情况下不起作用
- EOF有更安全的替代方案吗?它在我的情况下不起作用
- c++ 选择排序在特定情况下不起作用
- 寻找有关为什么此C++代码在没有引用的情况下不起作用的解释
- 句子转换器在存在新行的情况下不起作用
- 为什么 std::void_t 在这种情况下不起作用
- C++中的dynamic_cast在没有 RTTI 的情况下不起作用;为什么?
- 为什么SFINAE在这种情况下不起作用?
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 请帮助我理解为什么SFINAE在这种情况下不起作用
- 为什么#ifndef在这种情况下不起作用
- 为什么c_str在这种打开(文件名)的情况下不起作用
- ADL在特定情况下不起作用
- FillRect在某些情况下不起作用
- C++预处理器宏中的代码块在没有大括号的情况下不起作用
- 为什么cvPutText在这种情况下不起作用?
- Boost的ASIO + SSL在某些情况下不起作用
- 为什么贪婪的方法在这种情况下不起作用?
- 使用带有指针和文件的类概念 我的代码在第一种情况下不起作用,为什么?
- 为什么 std::function<boost::any ()> 在这种情况下不起作用?