使用正则表达式打印每个单词首字母的 C++ 程序


正则表达式 (regex) 是一个用于字符串操作的有用工具。它几乎存在于所有现代高级编程语言中,包括 C++。正则表达式用作通用的搜索模式。例如,通过构造一个简单的称为正则表达式的字符串,我们可以实现密码验证逻辑,该逻辑至少包含一个大写字母、一个小写字母、一个数字、一个特殊字符以及至少 8 个字符的总长度。

在本教程中,我们将学习如何使用 C++ 来仅显示指定字符串中包含的单词的首字母。在这里,我们将看到一个使用空格分隔单词的句子。无论字符是大写还是小写,计算机都将读取字符串,使用正则表达式将其分割,并返回每个单词的第一个字符。

要使用正则表达式,我们需要使用 `regex` 头文件导入 `regex` 库。要使用正则表达式,我们需要以下语法:

语法(创建正则表达式对象)

regex obj_name( <regular expression> )

定义正则表达式后,我们可以通过多种方式使用它们。我们将在下面看到我们想要的方法。现在,要读取单词中的第一个字符,正则表达式语法将如下所示:

语法(读取单词的第一个字符)

\b[a-zA-Z]

这里 `\b` 表示单词的开头。`[a-zA-Z]` 表示范围为 'a' 到 'z' 或 'A' 到 'Z' 的大写或小写字母,并且只取其中一个。现在让我们看看用于读取所有选定匹配项的迭代器对象:

语法(正则表达式迭代器)

regex_token_iterator<string::iterator> iterator_name( <begin pointer of string>, <ending pointer of string>, <regular expression>, <submatch>);

在此迭代器中,前两个参数是字符串对象的开始和结束指针。第三个参数是之前创建的给定正则表达式对象。第四个参数是子匹配项。当子匹配项为 0 时,它将返回来自匹配项(匹配位置)的元素;当子匹配项为 -1 时,它表示未匹配的位置(子匹配项 0 模式相反)。

算法

  • 将字符串 s 作为输入
  • 使用 '\b[a-zA-Z]' 定义正则表达式
  • 使用表达式对 s 进行匹配
  • 定义一个迭代器对象以仅读取这些匹配项
  • 对于迭代器对象中的每个项目,执行以下操作:
    • 显示项目
  • 结束循环

示例

#include <iostream>
#include <regex>
using namespace std;
string solve( string s){
   string ret = "";
   regex e("\b[a-zA-Z]");
   regex_token_iterator<string::iterator> i(s.begin(), s.end(), e, 0);
   regex_token_iterator<string::iterator> end;
   while (i != end) {
      ret += (*i++);
      ret += ", ";
   }
   return ret;
}
int main(){
   string s = "A string to read only the first letter of words";
   cout << "Given String: " << s << endl;
   cout << "The first letter of each word: " << solve( s ) << endl;
   s = "Central Pollution Control Board";
   cout << "Given String: " << s << endl;
   cout << "The first letter of each word: " << solve( s ) << endl;
}

输出

Given String: A string to read only the first letter of words
The first letter of each word: A, s, t, r, o, t, f, l, o, w, 
Given String: Central Pollution Control Board
The first letter of each word: C, P, C, B, 

结论

正则表达式用于在字符串中匹配常见模式。正则表达式库 (regex) 可用于所有高级语言,包括 Java、Python、Javascript、Dart 和 C++。它有许多应用。本文定义了一个读取每个单词第一个字符的正则表达式。我们需要一个迭代器对象,它逐个读取每个匹配字符。

更新于:2022年12月14日

412 次查看

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.