c++ - 我能总结一下这个 c++ 程序吗???它是元音和数字的计数循环
问题描述
我是 C++ 的早期初学者。我开发了一个程序但我想比较一下,试图总结以下代码来练习我的逻辑能力。
该程序目前正在运行。该程序计算在用户输入中找到的元音和数字的数量。输入通常必须是一个单词,但也可以是随机的。这里的特殊部分是,当识别出“#”时,程序停止计数。
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
main () {
char str[100];
cin>>str;
//Declaring values depending of the letter
int count_a = 0;
int count_e = 0;
int count_i = 0;
int count_o = 0;
int count_u = 0;
int count_digit = 0;
int i = 0;
while (str[i] != '#' && str[i] != '\0') {
//for(int i = 0; (str[i] != '#' && str[i] != '\0' ) ; i++) { //This loop is working identifyng one of the places of each
char input = str[i]; //Get character for character
switch(input){
//letter a
case 'a':
case 'A':
count_a++;
break;
//letter e
case 'e':
case 'E':
count_e++;
break;
//letter i
case 'i':
case 'I':
count_i++;
break;
//letter o
case 'o':
case 'O':
count_o++;
break;
//letter u
case 'u':
case 'U':
count_u++;
break;
//digit
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
case'0':
count_digit++;
break;
default:
break;
}
i++;
}
cout <<"a="<<count_a<< endl;
cout <<"e="<<count_e<< endl;
cout <<"i="<<count_i<< endl;
cout <<"o="<<count_o<< endl;
cout <<"u="<<count_u<< endl;
cout << "Digit="<<count_digit<< endl;
return 0;
}
例如,如果我写aaAeeeghjfh12iOu#12qea我的输出将是:
a=3
e=3
i=1
o=1
u=1
数字=2
解决方案
您可以使用数组来存储所有计数,然后只打印您感兴趣的值:
#include <array>
#include <cctype>
#include <climits>
#include <cstdio>
#include <iostream>
#include <numeric>
#include <string>
#include <string_view>
int main() {
std::string str;
std::cin >> str;
std::array<int, UCHAR_MAX> characters{};
for (auto const ch : str) ++characters[static_cast<unsigned>(ch)];
using namespace std::literals;
for (unsigned char const ch : "aeiou"sv)
std::printf("%c = %d\n", static_cast<char>(ch),
characters[std::tolower(ch)] + characters[std::toupper(ch)]);
std::printf("Digits = %d\n",
std::accumulate(&characters['0'], &characters['9'] + 1, 0));
}
学到更多:
推荐阅读
- jquery - 如何使用jQuery将thead、tr、th和td动态添加到表中?
- php - 如何添加 - 中间字符串
- azure - 有没有办法获取任务中使用的 SubscriptionID:“Azure 资源组部署”
- c# - BotDetect验证码未加载
- xamarin - Xamarin Android Entity Framework Core 链接器问题
- pandas - 多次分组后选择最后一个时间值
- c++ - 坚持理解内存对齐
- shopify - Shopify 根据大量变体更改价格
- node.js - AWS CodePipeline 在部署阶段失败并出现 CloudFormation 错误
- c++ - 未从函数返回调用复制构造函数