首页 > 解决方案 > 如何从.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;
}

那么如何逐行打印它们?任何帮助将不胜感激

标签: c++string

解决方案


您可以存储句子开头,然后在句子结尾创建一个子字符串。此子字符串将介于 [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

推荐阅读