目录
字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s="abcdefghij",则s[1]="b",s[9]="j",这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。
在C++中,我们会使用string来定义字符串,且string只出现在C++中(C这个系列),为了使用string,我们还需要使用一个头文件——cstring,当然用万能头也可以。
字符串的存储方式依然是以数组形式,主要是为了方便编程人员。如果"adfsdfdsfsdfsdfsdfsdfsdfsdfdsfsdfddfdsfdf"这么长的字符串让你手工存入数组,你可愿意?
- 有个N个字母(A~Z)连成一个字符串X,你需要在N个字母中寻找到一个独特的连续长度为K的字符串P,使得这个任意连续长度为K的字符串P在字符串X中只出现一次。请问这个字符串P最短长度为多少。例如字符串X为ABCDABC,则满足要求的最短的字符串P的长度为4。也就是求字符串的最短不重复子串。长度为3的话ABC有重复,长度为2的话AB或者BC都有重复,长度为1的话A、B、C都有重复。
-
- 输入格式:
-
- 输入的第一行包含 N,第二行包含一个由 N 个字符组成的字符串,每个字符均在 A..Z 之内。
- 输出格式:
-
- 输出一行,包含一个整数,为可以解决的问题的最小 K 值
- 限制:
-
- 1≤N≤100
- 样例 1 :
-
- 输入:
- 7
- ABCDABC
- 输出:
- 4
- #include
- using namespace std;
- int main() {
- int n; string s;
- set
x; - cin >> n; cin >> s;
- for(int len=1; len<=n; len++) {
- int flag=1;
- for(int i=0; i<=s.size()-len; i++) {
- if(x.count(s.substr(i,len))==1) {
- flag=0;
- break;}
- else
- x.insert(s.substr(i,len));
- }
- if(flag==1) {
- cout << len;
- break;
- }
- }
- return 0;
- }
- 输入一个正整数p,换行后再输入一个字符串,对字符串进行如下处理:
- 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字符。
- 展开方式:p=1时,对于字母子串,填充小写字母;p=2时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。p=3时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。
- 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de ”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于左边字符,输出 时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。
-
- 输入格式:
-
- 第1行为一个正整数p。第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。
- 输出格式:
-
- 只有一行,为展开后的字符串。
- 提示:
-
- 字符串长度不超过100;1<=p<=3。
- 样例 1 :
-
- 输入:
- 1
- abcs-w1234-9s-4zz
- 输出:
- abcstuvw123456789s-4zz
- 样例 2 :
-
- 输入:
- 3
- a-d-d
- 输出:
- a**d-d
- #include
- using namespace std;
- int p; string a;
- int main()
- {
- cin>>p; getchar(); int i; char j;
- cin>>a; int len=a.size();
- for(i=0;i
- if(a[i]=='-'&&i>0){
- if(a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9'&&a[i-1]1]||a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z'&&a[i-1]1]){
- if(p==1)
- cout<
- else if(p==2){
- if(a[i-1]>='a'&&a[i-1]<='z')
- char t=j-32; cout<
- }
- else if(a[i-1]>='0'&&a[i-1]<='9')
- cout<
- }
- if(p==3)
- cout<<'*';
- }
- }
- }
- return 0;
- }
题目三:
- n名同学参加了c++期末考试,他们的成绩单如下,但是有的人成绩单分数错了,会出现多次分数,如果出现了多次分数,按照较高的一个。请按照分数从高到低排序,如果成绩相同,则按照名字的字典序从小到大进行排序。
-
- 输入格式:
-
- 第一行一个整数n(n<=200000)表示有n个人参加了考试,接下来n组数据,每组数据包含两行,第一行为学生姓名(只包含引文小写字母和空格,且不超过200个字符),第二行为这个学生得到的分数(int范围以内)。
- 输出格式:
-
- 输出n行。排序之后的结果。
- 样例 1 :
-
- 输入:
- 4
- Aha World
- 99
- Tom Wang
- 80
- Ahaa
- 99
- Tom Wang
- 100
- 输出:
- Tom Wang
- Aha World
- Ahaa
答案三:
- #include
- using namespace std;
- struct node{
- int s;
- char name[205];
- }a[200005],b[200005];
- int n;
- bool cmp(node x,node y){
- if(strcmp(x.name,y.name)==0){
- return x.s>y.s;
- } return strcmp(x.name,y.name)<0;
- }
- bool cmp1(node x,node y){
- if(x.s==y.s){
- return strcmp(x.name,y.name)<0;
- } return x.s>y.s;
- }
- int main()
- {
- cin>>n;
- for(int i=1;i<=n;i++){
- gets(a[i].name);
- gets(a[i].name);
- scanf("%d",&a[i].s);
- }
- sort(a+1,a+n+1,cmp); int cnt=1;
- for(int i=1;i<=n;i++){
- if(strcmp(a[i].name,a[i-1].name)!=0)
- b[cnt++]=a[i];
- }
- sort(b+1,b+cnt+1,cmp1);
-
-
相关阅读:
idea项目设置鼠标右键点击文件夹通过IDEA打开
基于element ui 城市选择之间的级联选择
常用的主流音乐编曲软件有哪些?
【C语言】详解 malloc 、calloc函数的区别
互联网Java工程师面试题·Dubbo篇·第一弹
前端点击地图上的位置获取当前经纬度
win10睡眠快捷方式
Leetcode 剑指 Offer II 053. 二叉搜索树中的中序后继
Cesium屏幕中心坐标和相机位置坐标计算
小鱼送激光雷达啦 | 恰饭即抽奖第一期
-
原文地址:https://blog.csdn.net/zyxtjzys/article/details/127568945