实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述算法题每日一练---第22天:猜字母(String类)相关的知识,希望能为你提供帮助。
一、问题描述把 abcdefghijklmnopqrs共19个字母组成的序列重复拼接 106次,得到长度为 2014 的串。
接下来删除第 1 个字母(即开头的字母 a),以及第 3 个,第 5 个等所有奇数位置的字母。
【算法题每日一练---第22天(猜字母(String类))】得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请输出该字母。
二、题目要求
考察
1.字符串的相关函数以及使用
2.建议用时15~25min
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
三、问题分析这一题主要考察对字符串的使用,C++的STL库中提供了很多关于串的函数,下面的总结与提高部分有介绍。
这不就是删除1~n个元素,直到剩下最后一个吗,找到规律之后就很好办。
四、编码实现```c++
#include < iostream>
#include< string> //头文件
using namespace std;
int main()
string s1=" abcdefghijklmnopqrs" ; //初始化字符串
string s;
int i,j,n=106; //拼接106个
for(i=0; i< n; i++)
s+=s1;
while(s.size()!=1)//当不是最后一个时,进入循环,否则退出循环
for(i=0; i< s.size(); i++)
s.erase(i,1); //删除元素
cout< < s; //输出结果
return 0;
## 五、输出结果
输出结果为:q![1.png](https://s4.51cto.com/images/blog/202204/14121303_62579f4f0225082612.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)##六、总结与提高在C++中,C++ 标准库提供了 **string** 类类型,支持上述所有的操作,另外还增加了其他更多的功能,
编程时加入头文件:
#include< string> //或者万能头文件#include< bits/stdc++.h>
using namespace std;
### String函数:用string定义s类(定义什么都可以,只要把s变成定义的字母就可以调用C++中的函数),具体使用方法为:|||
| -------------------------- | --------------------------- |
| 函数| 用法|
|**常见操作**||
| s.resize(10)| 设置字符串长度为10|
| string s("ABC")| 构造字符串s的值为ABC|
| s.empty()| 判断字符串是否为空|
| s.length()或者s.size()| 求解字符串长度|
| s.begin()| 开始值|
| s.end()| 结尾值|
| **查找(查找成功返回元素位置,失败返回-1)**||
| s.find(A)| 查找字符A|
| s.find("ABC")| 查找字符串ABC|
| s.find(A,2)| 从位置2开始查找字符A|
| s.find("ABCD",1,2)| 从位置1开始,查找ABCD的前两个字符|
| s.rfind()| 从字符串尾部开始查找|
| **插入**||
| s.insert(2,3,A)| 在下标为2的地方添加三个A|
| s.insert(2,"ABC")| 在下标为2的地方添加字符串ABC|
| s.insert(2,"ABC",1)| 在下标为2的地方添加ABC中的一个|
| s.insert(2,"ABCD", 2,2)| 在下标为2的地方从字符串ABCD中位置2开始的2个字符 |
| s.push_back(A)| 在尾部添加字符A|
| **输出**||
| s.substr(pos,len)|pos代表输出字符的下标,len代表长度|
| **替换**||
| s.replace(2,4,"ABCD")| 从下标2的位置,替换4个字符为 "ABCD"|
| **删除**||
| s.erase(2)| 删除下标2以后的全部元素|
| s.erase(2,1)| 删除下标为2的一个元素|
| **翻转**||
| reverse(s.begin(),s.end()) | 翻转所有字符串,即逆序输出|
| **复制**||
| s1=s.substring(2)| 提取字符串s从2到尾部赋值给s1|
| s1=s.substring(2,3)| 提取字符串s从2开始三个字符赋值给s1|
| const char*s1=s.data()| 将string类转为字符串数组|
| s.copy(s1,2,3)| 将s中从第3个位置拷贝2个字符到s1中|
| **比较(假设原字符串为ABCD)**||
| s.compare("ABCD")| 相等返回0,大于原字符串返回1,小于返回-1|
| **清空**||
| s.assign("ABC")| 清空字符串,并置为ABC|
| s.assign("ABC",2)| 清空字符串,并置为ABC的前2个字符AB|
| s.assign("ABC",2,1)| 清空字符串,并置为ABC的从2开始的1个字符|
| s.assign(5,‘A’)| 清空字符串,并置为5个A|
| s.clear()| 清空字符串所有字符|
推荐阅读
- OpenHarmony——散点图
- pg快速入门--配置文件
- 嵌入式硬件开发有哪些步骤()
- Java网络编程指南
- java OA项目源码 flowable activiti流程引擎 Springboot html vue.js 前后分离
- 面试如何做好自我介绍
- 深度学习教程 | CNN应用(人脸识别和神经风格转换)
- 算法(编写函数以获取链表中的第N个节点)
- TELNET工作原理简介