📜  如何在 C++ 中获取完整的句子(1)

📅  最后修改于: 2023-12-03 14:52:15.540000             🧑  作者: Mango

如何在 C++ 中获取完整的句子

在 C++ 中获取完整的句子可能是一项常见的任务,通常涉及到字符串操作。本文将介绍几种获取完整句子的方法,包括使用 C++ 标准库、正则表达式以及逐个字符扫描等。

使用 C++ 标准库

C++ 提供了较为便捷的字符串操作功能,可以使用 C++ 标准库中的 string 和 stringstream 类来获取完整的句子。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string str = "This is a sentence. This is another sentence.";

    stringstream ss(str);
    string sentence;
    while (getline(ss, sentence, '.'))
    {
        sentence += ".";
        cout << sentence << endl;
    }

    return 0;
}

上述代码使用 stringstream 类将字符串 str 按照句号 '.' 进行分割,然后逐个输出完整的句子。

使用正则表达式

使用正则表达式可以更加精准地获取完整的句子。C++ 11 引入了正则表达式库,可以使用 头文件来实现正则表达式匹配。

#include <iostream>
#include <string>
#include <regex>

using namespace std;

int main()
{
    string str = "This is a sentence. This is another sentence.";

    regex pattern("[^\\.!?]*[\\.!?]");  // 匹配以句号、问号或感叹号结束的句子
    smatch result;
    while (regex_search(str, result, pattern))
    {
        cout << result.str() << endl;
        str = result.suffix().str();  // 从匹配到的子串之后继续匹配
    }

    return 0;
}

上述代码使用 regex 类将字符串 str 中满足规则的子串提取出来并输出,然后继续从未匹配部分继续匹配。

逐个字符扫描

逐个字符扫描是一种传统的方法,可以通过判断字符是否是句号、问号或感叹号来获取完整的句子。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "This is a sentence. This is another sentence.";

    string sentence;
    for (char c : str)
    {
        sentence += c;
        if (c == '.' || c == '?' || c == '!')
        {
            cout << sentence << endl;
            sentence.clear();
        }
    }

    return 0;
}

上述代码逐个字符扫描字符串 str,如果遇到句号、问号或感叹号则输出完整的句子。

以上是几种获取完整句子的方法,可以根据需求选择不同的方法实现。