首页 > 编程语言 >【C++】STL string类例题新思路记录(编写一个程序,告诉用户输入的句子包含多少个元音字母)

【C++】STL string类例题新思路记录(编写一个程序,告诉用户输入的句子包含多少个元音字母)

时间:2024-02-10 14:44:20浏览次数:20  
标签:std string strInput STL GetNumCharacters int 元音 例题

题干:编写一个程序,告诉用户输入的句子包含多少个元音字母。

 方案一:

1、创建一个普通函数,依次传入5个元音字母对查找字符串进行检测。

2、函数通过依次传入的单个元音字母,循环查找整个字符串最后返回统计值。

 1 #include <string> 
 2 #include <iostream> 
 3 using namespace std;
 4 int GetNumCharacters(string& strInput, char chToFind)
 5 {
 6     int nNumCharactersFound = 0;
 7     size_t nCharOffset = strInput.find(chToFind);
 8     while (nCharOffset != string::npos)
 9     {
10         ++nNumCharactersFound;
11         nCharOffset = strInput.find(chToFind, nCharOffset + 1);
12     }
13     return nNumCharactersFound;
14 }
15 int main()
16 {
17     string strInput("atooota");
18     int nNumVowels = GetNumCharacters(strInput, 'a');
19     nNumVowels += GetNumCharacters(strInput, 'e');
20     nNumVowels += GetNumCharacters(strInput, 'i');
21     nNumVowels += GetNumCharacters(strInput, 'o');
22     nNumVowels += GetNumCharacters(strInput, 'u');
23     cout << "The number of vowels in that sentence is:" << nNumVowels;
24     return 0;
25 }

上述方案有些缺陷:

1、mian作用域中的代码有些臃肿并且重复性很高,让人看着很不舒服。

 

改进思路:

1、避免重复性代码,即避免对函数的多次调用,且一次性将元音字母全部传入后继续计数。

 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 
 5 int CountVowels(const std::string& str, std::string& num) {
 6     int count = 0;
 7     for (char c : str)
 8         if (std::find(std::begin(num), std::end(num), c) != std::end(num))
 9             count++;
10     return count;
11 }
12 
13 int main() {
14     using namespace std;
15 
16     string sentence("ATOTOTA");
17     string vowels = "aeiouAEIOU";
18     int numVowels = CountVowels(sentence, vowels);
19 
20     cout << "句子中包含 " << numVowels << " 个元音字母。" << endl;
21 
22     return 0;
23 }

上述代码对比之下就简洁了许多,改进点包括:

1、将大小写元音字母一次性传入。

2、将用单个元音查找str修改为,str依次去和元音字符串进行find

标签:std,string,strInput,STL,GetNumCharacters,int,元音,例题
From: https://www.cnblogs.com/vangoghpeng/p/18007017

相关文章

  • CF316G3 Good Substrings
    题意简述有一个字符串\(s\)和\(n\)条限制,每条限制给出字符串\(t_i\)和两个整数\(l_i,r_i\),要求一个字符串要满足在\(t_i\)中的出现次数要在\([l_i,r_i]\)之间。求\(s\)有多少本质不同的子串满足所有限制。\(|s|,\max|t|\le5\times10^4,n\le10\)分析“本质不同......
  • B. Following the String
    题解我们从左向右构建字符串。每种数字我们都从a开始取,接下来我们用一个数组来存储对应数字下一次要取的字母。Code #include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;intb[N],a[N];intmain(){intt;cin>>t;while(t--){strin......
  • Java中String、StringBuffer、StringBuilder的区别以及使用场景总结
    Java中,String、StringBuffer和StringBuilder都用于处理字符串,但在功能和性能上有显著的区别。了解这些区别有助于选择最适合特定情境的类型。在选择使用String、StringBuffer或StringBuilder时,应根据字符串操作的性能需求和线程安全要求来做出决定。1、String、StringBuffer、......
  • 树与图的宽度优先遍历例题
    #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=100010;intn,m;inth[N],e[N],ne[N],idx;intd[N],q[N];intans=N;voidadd(inta,intb){e[idx]=b,ne[idx]=h[a],......
  • mysql插入数据出现java.sql.SQLException Create breakpoint : Incorrect string valu
    问题图片如下:  如果出现这个问题,就是当前的mysql设置的字符集和当前业务的需求符合;前:当前我需要在mysql中存入的内容中包括了表情等信息,如下:问题分析:因为我在docker中搭建的mysql设置的默认编码为utf-8,下面是我的my.cnf文件[client]default_character_set=utf8[my......
  • 无涯教程-RegExp.prototype.toString()函数
    toString方法返回正则表达式的字符串表示形式。RegExp.prototype.toString()-语法RegExpObject.toString();RegExp.prototype.toString()-返回值返回正则表达式的字符串表示形式。RegExp.prototype.toString()-示例varstr="Javascriptisaninterestin......
  • Go语言精进之路读书笔记第15条——了解string实现原理并高效使用
    15.1Go语言的字符串类型在Go语言中,无论是字符串常量、字符串变量还是代码中出现的字符串字面量,它们的类型都被统一设置为string特点string类型的数据是不可变的对string进行切片化后,Go编译器会为切片变量重新分配底层存储而不是共用string的底层存储string的底层的数据存......
  • StringUtils中isNotEmpty()与isNotBlank()的区别
    首先说明Strings1="",s2=null;变量s1是非空,且长度为0(中间没有空格);变量s2是空,且s2.length()会报错,java.lang.NullPointerException。 所以:isNotEmpty(str)相等于str!=null&&str.length()>0isNotBlank(str)相当于str!=null&&str.length......
  • 【多线程例题】使用三个线程,分别可以打印A,B,C。要求实现三个线程协同打印,顺序打印出ABC
    顺序打印-进阶版方法一:三个线程竞争同一个锁,通过count判断是否打印三个线程分别打印A,B,C方法一:通过count计数打印(三个线程上同样的锁,打印一个,召唤所有锁,如果不满足条件,则wait等待,锁自动解锁)方法二:/***有三个线程,分别只能打印A,B和C*要求按顺序打印ABC,打印10次*输出示......
  • Mybatis Plus java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.
    问题描述在进行SpringBoot整合MybatisPlus时提示10:49:08.390[restartedMain]DEBUGorg.springframework.boot.context.logging.ClasspathLoggingApplicationListener-Applicationfailedtostartwithclasspath:[file:/D:/%e7%99%be%e5%ba%a6%e7%bd%91%e7%9b%98/Vue......