1029 旧键盘 C++中find函数的使用

news2024/11/24 22:33:49

题目链接:

一、自己的想法:(弱化版双指针)

思路为用两个“指针”i, j分别指向原来字符串和实际输入字符串的第一个字符,然后判断i,j所指字符是否一致,若是则i, j同时++,若否则将i所指的字符存储进字符串c中,同时让i++.

第一遍代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a, b, c;
    cin >> a >> b;
    int k = 0;
    int lena = a.size();
    for (int i = 0, j = 0; i < lena;){
    	if (a[i] != b[j]){
    		c[k++] = a[i];
    		i++;
		}
		else {
			i++;
			j++;
		}
	}
    
    for (int j = 0; j < k - 1; ++j){
    	for (int i = j + 1; i < k; ++i){
    		if (toupper(c[i]) == toupper(c[j])) c[i] = '#';
		}
	}
    for (int i = 0; i < k; ++i){
    	if (isdigit(c[i])) cout << c[i];
    	else if (isalpha(c[i])) cout << (char)toupper(c[i]);
    	else if (c[i] == '_') cout << c[i];
	}
    return 0;
}

在这里插入图片描述
发现第五个样例 “运行时错误”
这是因为c字符串默认为空串,不能使用c[k++] = …的写法,这样会造成下标越界的错误,需改为c += …
(只能使用size中的空间,不能使用capacity中的空间),字符串的大小或长度(size)是指该字符串实际容纳的字符数,而字符串的容量(capacity)是该字符串最多容纳的字符数。

参考:vector容器中size与capacity的区别

size与capacity的区别

一般地,“运行时错误” 还包括这些:
return value 255:当0作为除数是就会报这样的错。
return value 3221225620:当运行时出现错误时会报这样的错。
return value 3221225477:访问越界时会报这样的错。
return value 3221225725:一般在无穷递归或空间太大时报这样的错。

修改之后的完整代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a, b, c;
    cin >> a >> b;
    int k = 0;
    int lena = a.size();
    for (int i = 0, j = 0; i < lena;){
    	if (a[i] != b[j]){
    		c += a[i];
    		i++;
		}
		else {
			i++;
			j++;
		}
	}
    
    for (int j = 0; j < c.size() - 1; ++j){
    	for (int i = j + 1; i < c.size(); ++i){
    		if (toupper(c[i]) == toupper(c[j])) c[i] = '#';
		}
	}
    for (int i = 0; i < c.size(); ++i){
    	if (isdigit(c[i])) cout << c[i];
    	else if (isalpha(c[i])) cout << (char)toupper(c[i]);
    	else if (c[i] == '_') cout << c[i];
	}
    return 0;
}

另解:(参考1029. 旧键盘(20)-PAT乙级真题)

考虑使用C++中的find函数。

分析:用string的find函数,遍历字符串s1,当当前字符s1[i]不在s2中,它的大写也不在ans中时,将当前字符的大写放入ans中,最后输出ans字符串即可。

代码如下:

#include <iostream>
#include <cctype>
using namespace std;
int main() {
    string s1, s2, ans;
    cin >> s1 >> s2;
    for (int i = 0; i < s1.length(); i++)
        if (s2.find(s1[i]) == string::npos && ans.find(toupper(s1[i])) == string::npos)
            ans += toupper(s1[i]);
    cout << ans;
    return 0;
}

/* 以下为补充知识 */ ,参考find()函数及其他常用函数总结

C++中,字符串string自带find函数(包含于头文件#include <string>中)
find函数可用于在字符串a中查找另一个子串b,或者在字符串中查找单个字符。本题主要使用的是后者。如果找不到,则返回值为string::npos ,即对于string,通过a.find(val) == string::npos来做判断是否查找成功

示例1:

string s1;
char c;
if(s1.find(c) != string::npos){   //查找字符 
		printf("字符c在s1中的起始下标为%d\n", s1.find(c)); 
	}else{
		printf("s1中不存在字符c"); 
	} 

示例2:(用于计算一个字符串中有多少不重复的字符数

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str;
    getline(cin, str);
    int count = 0;
    for (int i = 0; i <= 127; i++)
        if (str.find(i) != string::npos)
        count++;
    cout << count;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器多线程到事件循环机制

浏览器与js运行机制 进程与线程 进程 进程是CPU分配资源的最小单位&#xff0c;它是一个可以自己独立运行且拥有自己资源空间的任务程序&#xff1b;包括程序以及程序所使用的内存及系统资源 线程 线程是CPU调度的最小单位&#xff0c;它就是程序中的一个执行流&#xff1…

2023年三月份图形化二级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

基础数据结构--线段树(Python版本)

文章目录前言特点操作数据存储updateLazy下移查询实现前言 月末了&#xff0c;划个水&#xff0c;赶一下指标&#xff08;更新一些活跃值&#xff0c;狗头&#xff09; 本文主要是关于线段树的内容。这个线段树的话&#xff0c;主要是适合求解我们一个数组的一些区间的问题&am…

java中的类型转换

java的基本数据类型 1.数值型&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;long&#xff0c;float&#xff0c;double 2.字符型&#xff1a;char 3.布尔型&#xff1a;boolean 数据类型占据字节数byte1个字节short2个字节int4个字节long8个字节float4个字节…

开发一个问答式的node脚本

前言 我们公司一般有早上知识分享的规定&#xff0c;那天有个同事分享了如何通过Node脚本实现国际化替换 。 起因是这样的&#xff0c;有一个已经成熟的项目了&#xff0c;突然被要求实现中英文切换。前端中英文切换基本上就是通过 vue-i18n 来实现&#xff08;不熟悉的可以看…

安装配置DHCP

本次实验采用CentOS71.检查在安装DHCP之前先使用rpm命令查看系统中已有的DHCP软件包rpm -qa | grep dhcp由此可知&#xff0c;系统中尚未安装DHCP软件包2.安装我们可以使用yum命令为系统安装DHCP软件包yum -y install dhcp安装完成后再次检查可以看到DHCP软件包3.配置dhcp配置文…

20230225在WIN10下安装PR2023失败的解决

20230225在WIN10下安装PR2023失败的解决 2023/2/25 23:42 对于Adobe Premiere Pro 2023&#xff0c;就算你安装在早起的Windows 10上&#xff0c;也会安装失败的&#xff01; 对于WIN7&#xff0c;就不要再想安装PR2023了&#xff0c;根本不支持呀&#xff01; Adobe Installer…

php 基于ICMP协议实现一个ping命令

php 基于ICMP协议实现一个ping命令 网络协议是什么ICMP 协议什么是ICMP?ICMP 的主要功能ICMP 在 IPv4 和 IPv6 的封装Wireshark抓包ICMP 请求包分析PHP构建 ICMP 数据包php中的 pack & unpack 函数字节和字符packunpackICMP计算校验和步骤总结网络协议是什么 网络协议&…

_hand-1

实现防抖函数&#xff08;debounce&#xff09; 防抖函数原理&#xff1a;把触发非常频繁的事件合并成一次去执行 在指定时间内只执行一次回调函数&#xff0c;如果在指定的时间内又触发了该事件&#xff0c;则回调函数的执行时间会基于此刻重新开始计算 防抖动和节流本质是不一…

Socket通信详解

Socket通信详解 文章目录Socket通信详解Socket流程介绍函数介绍编程实例Socket流程介绍 socket通信类似于电话通信&#xff0c;其服务器基本流程就是 Created with Raphal 2.3.0安装电话socket()分配电话号码bind()连接电话线listen()拿起话筒accept()函数介绍 socket() 其中…

行测-判断推理-图形推理-样式规律-加减异同

图1图2图3选D图1图2都有的线&#xff0c;则消除图1图2只有一幅图里有的线&#xff0c;则保留选C第一列和第二列都有的线&#xff0c;则消除第一列和第二列只有一幅图里有的线&#xff0c;则保留选A第一列顺时针旋转90&#xff0c;再与第二列去同存异选D第一列和第二列去同存异&…

二叉树、队列、栈、广义表(二)数据结构与算法(十八)

数据结构与算法&#xff08;一&#xff09;-软件设计&#xff08;十七&#xff09;https://blog.csdn.net/ke1ying/article/details/129220378 线性表-队列与栈 队列&#xff1a;先进先出。 栈&#xff1a;先进后出。 循环队列&#xff1a;队投和队尾连接起来。 队空的条件&…

LeetCode 21.剑指 Offer II 078. 合并两个有序链表 | C语言版

LeetCode 21. 合并两个有序链表 | C语言版LeetCode 21. 合并两个有序链表题目描述解题思路思路一&#xff1a;使用栈代码实现运行结果参考文章&#xff1a;思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a;[]()LeetCode 剑指 Offer II 078. 合并排序链表…

《MySQL系列-InnoDB引擎25》表-InnoDB逻辑存储结构

InnoDB逻辑存储结构 从InnoDB存储引擎的逻辑存储结构看&#xff0c;所有数据都被逻辑地存放在一个空间中&#xff0c;称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block)&#xff0c;InnoDB存储引擎的逻辑存储结构…

JVM系统优化实践(4):以支付系统为例

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;前面说过&#xff0c;JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面&#xff0c;而老年代则将创建之后需要…

python刷题

目录标题1、输出前三同学的名字-input().split()2、字典的使用3、DA12 牛客网不同语言使用人数4、DA16 用户常用语言有多少5、python变量1、输出前三同学的名字-input().split() s1 input().split() print(tuple(s1)[:3])2、字典的使用 注意点&#xff1a;1&#xff0c;对字典…

如何使用 FreeSql 无缝接替 EF Core ?

如何使用 FreeSql 无缝接替 EF Core&#xff0c;并实现数据表的 CRUD 操作项目说明DB & 数据表结构DB & 数据表创建数据表 User 实体模型创建使用 EF Core 实现 User 表新增用户信息添加 EF Core 相关的 nuget 包编写 EF Core 操作 User 表的 CRUD 代码FreeSql 使用 Db…

系统启动太慢,调优后我直呼Nice

问题背景最近在负责一个订单系统的业务研发&#xff0c;本来不是件困难的事。但是服务的启动时间很慢&#xff0c;慢的令人发指。单次启动的时间约在10多分钟左右&#xff0c;基本一次迭代、开发&#xff0c;大部分的时间都花在了启动项目上。忍无可忍的我&#xff0c;终于决定…

链路追踪——【Brave】第一遍小结

前言 微服务链路追踪系列博客&#xff0c;后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。 Brave 何为Brave&#xff1f; github地址&#xff1a;https://github.com/openzipkin/brave Brave是一个分布式追踪埋点库。 #mermaid-svg-riwF9nbu1AldDJ7P {font-family:"…

大数据Hadoop教程-学习笔记05【Apache Hive DML语句与函数使用】

视频教程&#xff1a;哔哩哔哩网站&#xff1a;黑马大数据Hadoop入门视频教程 总时长&#xff1a;14:22:04教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大…