信息学奥赛第三节 —— 字符串3(对字符串使用sort/reverse + isupper() + islower() + isdigit())

信息学奥赛第一节——字符串1(字符串的读取 + size函数 + 下标的使用) 字符串string类 string是C++中STL标准模板库提供的字符串类,用来处理字符串相关的问题 其实,字符串的本质依然是字符数组。只不过string是长度不固定的,或者说是长度不限的字符数组。在使用string类的时候,不要先定义长度,如char c[100] 先定义一个字符数组c char c[100];//c[0] == *c 字符数组相关的函数比较少,string集成了很多的函数 字符数组的本质是数组,故其不能直接进行比较或者拼接运算。string可以直接进行比较 阅读详情
与字符串有关的函数

字符类型的判断:

  • isalpha(c) —— 是否是字母
  • islower(c) —— 是否是小写字母
  • isupper(c) —— 是否是大写字母
  • isdigit(c) —— 是否是数字

字符类型转换:

  • tolower() —— 转小写
  • toupper() —— 转大写

排序:

  • sort() —— 默认升序排序,常用sort(a,a + n)对整个数组排序,sort(a + 1,a + n - 1)对从第二个位置到倒数第二个位置排序。
  • reverse() —— 逆序输出元素

获取指针:

string s;
  • s.begin() —— 头指针
  • s.end() —— 为指针 最后一个位置的下一位

举例

toupper()

#include <iostream>
#include <string>

using namespace std;

int main()
{
    char c;
    cin >> c;//b
    c = toupper(c);//将小写字符转化为大写字符并返回大写字符的ASCII码
    cout << c << endl;//B
    return 0;
}

用sort对从第二个位置至倒数第二个位置排序

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    int a[12] = {1000,5,6,3,4,9,8,7,11,55,10,1000};
    int n = 12;
    sort(a + 1,a + n - 1);
    for (int i = 0; i < n;i++) cout << a[i] << " ";//1000 3 4 5 6 7 8 9 10 11 55 1000
    return 0;
}

使用reverse对数组逆序输出

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    int a[5] = {1,2,3,4,5};
    int n = 5;
    reverse(a,a + n);
    for (int i = 0; i < n;i++) cout << a[i] << " ";//5 4 3 2 1
    return 0;
}

对字符串使用sort和reverse

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s1 = "abcde";
    string s2 = "bceda";
    
    reverse(s1.begin(),s1.end());//对s1进行逆序输出
    cout << s1 << endl;//edcba
    
    sort(s2.begin(),s2.end());//对s2进行排序
    cout << s2 << endl;//abcde
    return 0;
}
练习1 原题链接

题目描述

从键盘中任意输入一串字符,直至输入"#"字符代表结束.请编程统计输入的字符中的大写字母,小写字母和数字字符的个数分别是多少?

输入

输入只有一行,包括一串字符.(长度小于20)

输出

输出只有一行(这意味着末尾有一个回车符号),包括3个整数。分别代表大写字符,小写字符和数字字符的个数。

样例输入

daDSALDdcada3240#

样例输出

5 7 4

AC代码1:

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    getline(cin,s);//读入字符串
    int len = s.size();
    int daxie = 0,xiaoxie = 0,shuzi = 0;//用来计数
    for (int i = 0;i < len;i++)//遍历字符串中的元素
    {
        if (s[i] == '#') break;//读到结束标志
        if (s[i] >= 'A' && s[i] <= 'Z') daxie++;
        else if (s[i] >= 'a' && s[i] <= 'z') xiaoxie++;
        else shuzi++;
    }
    cout << daxie << " " << xiaoxie << " " << shuzi << endl;
    return 0;
}

补充:本题的思路很简单,只需要遍历字符串的元素,依次统计个数即可。需要强调一下,代码编写完之后,可以通过输入一些特殊的测试样例来大概测试一下代码的正确性。如:

  • 输入AAAAAAAAAA#,程序应该输出10 0 0。(10个大写字母)
  • 输入aaaaaaaaaa#,程序应该输出0 10 0。(10个小写字母)
  • 输入1111111111#,程序应该输出0 0 10。(10个数字)

当然,也可以利用前面介绍的一些函数来实现:
AC代码2:

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    getline(cin,s);
    int len = s.size();
    int daxie = 0,xiaoxie = 0,shuzi = 0;
    for (int i = 0;i < len;i++)
    {
        if (s[i] == '#') break;
        if (isupper(s[i])) daxie++;
        else if (islower(s[i])) xiaoxie++;
        else if (isdigit(s[i])) shuzi++;
    }
    cout << daxie << " " << xiaoxie << " " << shuzi << endl;
    return 0;
}
练习2 原题链接

题目描述

James在一节C++课程上,准备为自己的程序定义变量名称。老师告诉James,一个合法的变量名应该满足如下的三个条件:
1、只能由字母(大写或者小写)、数字及下划线(_)组成
2、不能以数字开头
3、不能是C++中有特殊含义的单词,由于James是C++的初学者,只学过int、double、cout、cin这四个有特殊含义的单词,因此James只要避开这几个单词就可以。
请你编程帮助James判断他定义的变量名是否合法。

输入

一行,包含一个字符串,是James为变量起的名字,且长度不大于20。

输出

一行,如果是合法的C++变量名,则输出yes,否则输出no。

样例输入

sum

样例输出

yes

AC代码:

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

bool is_law(string s)//用来判断变量名是否合法
{
    int len = s.size();
    if (isdigit(s[0])) return false;//以数字开头
    if (s == "cin" || s == "cout" || s == "int" || s == "double") return false;//关键字重合
    for (int i = 0;i < len;i++)//遍历字符
    {
        //既不是大写字母也不是小写字母也不是下划线
        if (!isupper(s[i]) && !islower(s[i]) && s[i] != '_') return false;
    }
    return true;
}

int main()
{
    string s;
    getline(cin,s);
    if (is_law(s)) cout << "yes" << endl;
    else cout << "no" << endl;
    return 0;
}
新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活 本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。 阅读详情

相关推荐

《数据分析岗笔试高频题:字节常用的SQL与AB测试考题解析》

• 核心考点:用RANK()/DENSE_RANK()/ROW_NUMBER()排序,SUM() OVER()计算累积值。◦ 用公式n=2*(Zα/2+Zβ)^2*σ²/δ²,取α=0.05,β=0.2,计算得每组需260人;◦ 关注字节技术公众号“字节跳动数据团队”,学习真实AB测试案例(如“推荐算法优化实验”)。• 题型分布:SQL编程题(40%)、AB测试方案设计(30%)、数据洞察题(30%);◦ 牛客网“字节跳动SQL真题”(如“统计用户7日留存”“广告投放ROI计算”)。

2501_91651594的博客 1107

东方博宜OJ: 1097 - 统计字符的个数C++

题目描述从键盘中任意输入一串字符,直至输入字符代表结束。请编程统计输入的字符中的大写字母,小写字母和数字字符的个数分别是多少?输入输入只有一行,包括一串字符。(长度小于 2020,且没有空格)输出输出只有一行,包括 33 个整数。分别代表大写字符,小写字符和数字字符的个数。样例。

lailaike08的博客 1708

R | 提取文件夹内栅格数据的最小值、最大值、标准差和平均值

各位同学好,我们长需要用长时间序列栅格数据的平均值做变量的时间变化分析,用代码能够帮助我们省下很多时间。

qq_48539301的博客 449

编写程序输入一串以‘#’结束的字符,统计其中大写字母数、小写字母数和数字 数的个数,并输出统计结果。...

对于编写程序输入一串以‘’分割的字符串,可以使用 Python 中的 split() 方法来实现。示例代码如下: string = "hello,world,this,is,a,test" output = string.split(',') print(output) 输出结果为: ['hello', 'world', 'this', 'is', 'a', 'test'] 其中 split(...

weixin_42609225的博客 2080

魔改xjar支持springboot3,

其实这里基本就没问题了,实际项目中只要把这个spring-core包从私仓中替换,项目加密也就没有太大的毛病,但是这样对于追求完美的我来说,方便性还差点。原因找到了,看了下springboot github的issue,官方确实变更了,原因是因为springboot2中的。xjar项目文档还是不错的,clone下来,跟着文档,很容易就测试并通过了我的测试项目,于是便推给其他同事使用了。方法,那么问题来了,为啥springboot2没问题,spring3读取出来的却又是加密的,这是为毛?

jioulongzi的专栏 1538

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1119

【HUSTOJ】1025: 统计字符的个数

1025: 统计字符的个数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 117  Solved: 79 原题链接 Description 从键盘中任意输入一串字符,直至输入"#"字符代表结束.请编程统计输入的字符中的大写字母,小写字母和数字字符的个数分别是多少? Input 输入只有一行,包括一串字

cisordeng's space 1821

AI大模型API中转站选型指南:12项关键指标与实战评估

随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实

weixin_29056101的博客 445

C++【基础】从键盘上输入若干字符,直到输入’#”结束。统计英文字母(分大小写)、数字、空格 。

示例: 输入:daDSALDdcada3240# 输出:大写字母:5 小写字母:7 数字字符:4 #include <bits/stdc++.h> using namespace std; int main() { char a; int big=0,small=0,num=0; a=getchar(); while(a!='#') { if((a>='A')&&...

yzx_jerry的博客 6376

手把手教你用STM32CubeMX配置I3C通信(含动态地址分配实战)

本文提供了一份基于STM32CubeMX配置I3C通信的实战指南,重点讲解了动态地址分配的实现步骤。通过详细的工程配置、从设备枚举、CCC命令使用及数据读写示例,帮助开发者快速掌握这一高效通信协议,以替代传统的I2C或SPI接口,满足多传感器连接与低功耗设计需求。

c8d9e0f1的博客 543

数字电路与逻辑设计——组合逻辑篇

在数字电路中,根据逻辑功能的不同而分为两大类,组合逻辑电路与时序逻辑电路。 1、何为组合逻辑电路 我们只需铭记一点就是,这种电路的输出Y只与当时的输入X有关,而与之前的输入X’无关。所以这是一个可以随输入X的变化而瞬变输出Y的电路,如果用我们的Verilog代码来表示,则可能会出现在如下语句中: ①针对wire型变量,assign Y = X1 && X2; ②针对reg型变量,alway

蓝湖江船客的博客 1万+

输入#的个数:

/*输出: #  #  #  # #           # #           # #  #  #  # */ import java.util.Scanner; public class Rectangle1 { public void DoDraw(int n){ //String str =""; for(int i = 0;i < n;i

djw10962000的专栏 687

如何做好软件需求分析?

软件需求分析也称为系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。软件开发一般包括:可行性分析、需求分析、软件设计、软件开发、软件测试、软件实施、软件服务等步骤,需求分时软件开发的第一步骤。用户需求分析是指在系统设计之前和设计、开发过程中对用户需求所作的调查与分析,是系统设计、系统完善和系统维护的依据。

qq_41854911的博客 1415

10.10 今日学习

还是昨天的list数组。 List<int> list = new List<int>() { 2,44,67,22,24,27,42,12,99,45}; int sum = 0; foreach (int s in list) { sum += s; } ...

qq_57015487的博客 331

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

输入一行字符,以‘#‘作为结束标志,分别统计出其中的英文字母、空格、数字和其他字符的个数。

根据提示,在右侧编辑器补充代码,输入一行字符,以'#'作为结束标志,分别统计出其中英文字母、数字、空格和其他字符的个数。

weixin_74826993的博客 241

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++字符串——[D]统计字符个数

从键盘中任意输入一串字符,直至输入"#"字符代表结束.请编程统计输入的字符中的大写字母,小写字母和数字字符的个数分别是多少?输出只有一行(这意味着末尾有一个回车符号),包括3个整数,分别代表大写字符,小写字符和数字字符的个数。输入只有一行,包括一串字符。(长度小于20,没有空格)

qq_39127687的博客 881

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++---第七次作业。

我觉得不可思议

pjq790052080的博客 475

C++命名空间

int x;其次我们要认识到,命名空间初始化时,其成员可以是变量,函数,结构,枚举,类.......几乎一切带有名称的部分。并且命名空间是允许嵌套的。无论是 using声明 或者是 域解析运算符 相对于 using编译 都是更加安全的,虽然他们没有using编译那么方便,特别是在大型程序中,贸然展开命名空间很容易引起不必要的风险。

Drise_的博客 447

从键盘录入一串字符(个数不定,遇到‘#‘结束)到一维字符数组,统计大写字母和小写字母的个数

if (ch[i] >= 'a' && ch[i] <= 'z') //判断是大写还是小写。= '#') //输入字符到ch里。//判断完i要加一,以便输入下一个字符。printf("大写字母%d个,小写字母%d个", daxie, xiaoxie);

m0_63764213的博客 498

day8-字符串作业

输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符) 例如: 输入**'abcd1234 ’ ** 输出**‘bd24’** m = 'abcd1234 ' for index in range (len(m)): if index % 2 == 1: print(m[index], end = ' ') 输入用户名,判断用户名是否合法(用户名长度6~10位) user_name = input('请输入用户名:') for x in user_na..

qq_54699261的博客 267

信息学奥赛第五节 —— 字符串5【刷题篇】

字符串练习 练习1 词组缩写 解题思路:只需要找到每个单词的第一个字母,将其转化为大写字母即可。转化时,可以使用toupper函数。需要注意的是,输入的一行字符串中,可能出现首字母为空格的情况,故需要特判一下。 AC代码: #include <algorithm> #include <iostream> #include <cstring> #include <string> using namespace std; int main() { st

smallrain6的博客 631

【信奥赛一本通】2049:字符串判等(详细代码)

【c++解决】判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。1.【题目描述】2.【代码】 1.【题目描述】 【题目描述】 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。 【输入】 两行,每行包含一个字符串。 【输出】 若两个字符串相等,输出YES,否则输出NO。 【输入样例】 a A bb BB ccc CCC Aa BBbb CCCccc 【输出样例】 YES 【提示】 本评测系统基于linux,不支持函数strupr、strlwr。 2.【代码】

qq_40802813的博客 3034

《C++程序设计实践》实验十一

《C++程序设计实践》实验十一 一、课内实验题(共10小题,100分) 题型得分 100 【描述】 按要求计算数值。 【输入】 第一行是整数n,表示第二行有n个整数。 第二行:n个整数。 所有整数都在0和100之间。 【输出】 先输出: 1 100 101 101 对于输入中第二行的每个整数x,输出两行: 第一行:k=x; 第二行:x的平方。 【输入示例】3 3 4 5 【输出示例】 1 100 101 101 k=3 9 k=4 16 k=5 25(10分) 我的答案: A(int x) { n = x;

Michael___J的博客 1894

C++变量详解:从基础定义到内存原理与实战应用

变量是编程语言中用于存储数据的基本容器,其本质是内存中一段具有名称的存储空间。从原理上讲,变量通过数据类型定义内存布局,通过变量名提供访问接口,实现了数据在程序运行期间的持久化存储。这一机制的技术价值在于为程序提供了状态记忆能力,使得复杂的计算、逻辑判断和数据交互成为可能。在应用场景上,变量广泛应用于用户输入处理、游戏状态跟踪、算法计算等几乎所有软件功能模块。本文聚焦C++变量,深入讲解其定义规则、数据类型、作用域管理以及内存地址原理,并针对C++小游戏开发和C++面试题中常见的变量使用陷阱,提供实用的调试

weixin_29197051的博客 335

C++程序设计案例实训教程第10章

第10章  关于对象的高级专题 数据的共享和保护机制是C++的重要特性之一。其包含的内容主要为标识符的作用域、可见性和生存期,通过类的静态成员实现同一个类的不同对象之间数据和操作的共享,通过常成员来设置成员的保护属性。作用域是一个标识符在程序正文中有效的区域。类可以被看成是一组有名成员的集合,类X的成员N具有类作用域。可见性指程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。对象从诞生

hxcinfo的博客 1043
上一篇: 信息学奥赛第二节 —— 字符串2(s.find() + s.substr() + s.erase() + s.insert() + s.replace())
下一篇: 信息学奥赛第四节 —— 字符串4(stoi + to_string)
Zsprinkle
博客等级 码龄8年 235粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值