算法题每日一练---第22天:猜字母(String类)

简介: 把 abcdefghijklmnopqrs共19个字母组成的序列重复拼接 106次,得到长度为 2014 的串。

一、问题描述


把 abcdefghijklmnopqrs共19个字母组成的序列重复拼接 106次,得到长度为 2014 的串。

接下来删除第 1 个字母(即开头的字母 a),以及第 3 个,第 5 个等所有奇数位置的字母。

得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请输出该字母。


二、题目要求


考察

字符串的相关函数以及使用
建议用时15~25min


三、问题分析


这一题主要考察对字符串的使用,C++的STL库中提供了很多关于串的函数,下面的总结与提高部分有介绍。


一开始,我直接使用for循环判断是否为素数,删除相应字母,但后来发现,比如你删去第一个元素,当你删去第3个元素是发现,第3个元素已经变成第2了,以此类推第5个元素变成第3个,第7个元素变成第4个......


这不就是删除1~n个元素,直到剩下最后一个吗,找到规律之后就很好办。


四、编码实现


#include <iostream>#include<string>//头文件usingnamespacestd;
intmain()
{
strings1="abcdefghijklmnopqrs";//初始化字符串strings;
inti,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;//输出结果return0;
}


五、输出结果


输出结果为:q


六、总结与提高


在C++中,C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能, 编程时加入头文件:

#include<string>//或者万能头文件#include<bits/stdc++.h>usingnamespacestd;


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() 清空字符串所有字符



相关文章
|
2月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
39 0
java基础(13)String类
|
1月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
56 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
1月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
25 2
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
33 4
|
1月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
2月前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
1月前
|
数据可视化 Java
让星星月亮告诉你,通过反射创建类的实例对象,并通过Unsafe theUnsafe来修改实例对象的私有的String类型的成员属性的值
本文介绍了如何使用 Unsafe 类通过反射机制修改对象的私有属性值。主要包括: 1. 获取 Unsafe 的 theUnsafe 属性:通过反射获取 Unsafe类的私有静态属性theUnsafe,并放开其访问权限,以便后续操作 2. 利用反射创建 User 类的实例对象:通过反射创建User类的实例对象,并定义预期值 3. 利用反射获取实例对象的name属性并修改:通过反射获取 User类实例对象的私有属性name,使用 Unsafe`的compareAndSwapObject方法直接在内存地址上修改属性值 核心代码展示了详细的步骤和逻辑,确保了对私有属性的修改不受 JVM 访问权限的限制
52 4
|
1月前
|
存储 安全 Java
【一步一步了解Java系列】:认识String类
【一步一步了解Java系列】:认识String类
25 2
|
1月前
|
算法
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
23 1
|
1月前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
36 4

热门文章

最新文章