c++ - 如何从.c++中的txt文件中查找句子?
问题描述
我的问题是读取 txt 文件并每行打印 1 个句子,但我不确定如何做到这一点,我有以下代码来查找句子结尾的 tho:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ifstream infile("test.txt",ios::in);
string current;
int count=0;
while(getline(infile, current))
{
for(int i=0;i<current.size();i++)
if(current[i]=='.' || current[i]=='?' || current[i]=='!')
count++;
}
cout<<"Total Sentences: "<<count<<"\n";
return 0;
}
那么如何逐行打印它们?任何帮助将不胜感激
解决方案
您可以存储句子开头,然后在句子结尾创建一个子字符串。此子字符串将介于 [sentence_start, i] 范围内。
int sentence_start = 0;
for (int i = 0; i < current.size(); i++) {
// if sentence end
if (current[i] == '.' || current[i] == '?' || current[i] == '!') {
// get sentence substring
string sentence = current.substr(sentence_start, (i + 1) - sentence_start);
...
一旦你有了这个句子的子字符串,你就可以用换行符打印它。
// output sentence
cout << sentence << endl;
最后,您应该更新句子开头。
// update sentence start
sentence_start = i + 1;
如果它在空白字符上,则增加句子开头。
// if sentence start and whitespace
if (i == sentence_start && isspace(current[i])) {
// increase sentence start
sentence_start++;
}
您的 while 循环变为:
while (getline(infile, current)) {
int sentence_start = 0;
for (int i = 0; i < current.size(); i++) {
// if sentence end
if (current[i] == '.' || current[i] == '?' || current[i] == '!') {
// get sentence substring
string sentence = current.substr(sentence_start, (i + 1) - sentence_start);
// output sentence
cout << sentence << endl;
// update sentence start
sentence_start = i + 1;
// increase count
count++;
}
// if sentence start and whitespace
if (i == sentence_start && isspace(current[i])) {
// increase sentence start
sentence_start++;
}
}
}
文件的结果
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
是
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Total Sentences: 4
推荐阅读
- coldfusion - Cold Fusion - 新服务器 - 客户端任务过多
- reactjs - 无法通过 webpack 模块联合使用 material-ui 导入组件
- python - 如何将重复的日期行分组到新列中
- google-chrome - 从 Chrome 开发工具导出大型 HAR 文件
- javascript - 我可以在 GoDaddy 共享主机上托管 Aurelia 应用程序吗?
- swift - SwiftUI - 使用警报更改视图
- db2 - Db2 不允许更新表,抛出错误说操作不完整
- c# - WS_EX_LAYOUTRTL 导致控件边缘出现黑条
- python - 修改字符串列表
- php - 在 laravel 中为博客类别创建计数器