字符串入门

 

第1题     习题1 游客统计 查看测评数据信息

问题描述: 

漫画馆是很多小朋友喜欢去游玩的地方,为了方便统计游客的数量,在漫画馆的出入口设置了一些装置用来记录游客进出的情况。某天漫画馆关门的时候用来统计游客数据的机器突然坏了,现在只知道整天出入漫画馆的情况,由一串 I 和 O 的代码来表示,I 表示有一个人进入漫画馆,O 表示一个人离开漫画馆。馆长的小助手琳琳希望知道这天最多有多少个游客同时在漫画馆里面参观,你能帮助琳琳解决这个问题吗? 

输入格式: 

一行一个字符串,全都有 O 和 I 这两组字符组成。 

输出格式: 

最多同时在漫画馆的人数。 

输入样例: 

IIIOOIIOIOOO 

输出样例: 

【数据范围】 

对于 50%的数据 字符串长度小于 200 

对于 100%的数据 字符串长度小于 10000 

保证在馆人数不会出现负数。 

#include<bits/stdc++.h>
using namespace std;
int main(){
	string a;
    int s=0,maxn=0; 
    cin>>a;
    for(int i=0;i<a.size();i++){
        if(a[i]=='I') s++;
        if(a[i]=='O') s--;
        if(s>maxn)maxn=s;
    }
	cout<<maxn;
    return 0;
}
第2题     习题2 统计字母 查看测评数据信息

输入一行长度不超过10^5的字符串(可能有空格),统计小写字母出现的次数。

输入格式 

一行字符串,长度<10^5。

输出格式

一个整数。

输入样例

Ab 12394094 ef***

输出样例

3

#include<bits/stdc++.h>
using namespace std;
int main(){
    string c;
    long long s=0;
    getline(cin,c);
    for(int i=0;i<c.size();i++){
        if(c[i]>='a'&&c[i]<='z')s++;
    }
    cout<<s;
    return 0;
}
第3题     习题3 元音字母  查看测评数据信息

给你一个所有字符都是字母的字符串, 请输出其中元音字母的个数。(提示: 二十六个字母中的五个元音字母是 a, e, i, o, u; 所有字符有大小写区别。)

输入格式

仅一行, 包括一个字符串。

【数据规模】

对于 100%的数据, 字符串长度小于等于1000000

输出格式

输出一个整数, 如题所述。

输入/输出例子1

输入:

Helloworld

输出:

3

#include<bits/stdc++.h>
using namespace std;
string a;
bool check(int n){
    if(a[n]=='a'||a[n]=='A') return true;
    if(a[n]=='e'||a[n]=='E') return true;
    if(a[n]=='i'||a[n]=='I') return true;
    if(a[n]=='o'||a[n]=='O') return true;
    if(a[n]=='u'||a[n]=='U') return true;
    return false;
}
int main(){
    cin>>a;
    const int s=a.size();
    int sum=0;
    for(int i=0;i<s;i++)
        if(check(i)) sum++;
    cout<<sum;
    return 0;
}
第4题     习题4 亲朋字符串  查看测评数据信息

编写程序,求给定字符串s的亲朋字符串s1。

亲朋字符串s1定义如下:给定字符串s的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符; 给定字符串s的第二个字符的ASCII值加第三个字符的ASCII值,得到第二个亲朋字符;依此类推,直到给定字符串s的倒数第二个字符。亲朋字符串的最 后一个字符由给定字符串s的最后一个字符ASCII值加s的第一个字符的ASCII值。

【输入格式】

输入一行,一个长度大于等于2,小于等于100的字符串。字符串中每个字符的ASCII值不大于63。

【输出格式】

输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。

【输入】

1234

【输出】

cege

#include<bits/stdc++.h>
using namespace std;
int a[26];
char c[105];
int main(){
    string str;
    getline(cin,str);
    int i;
    for(i=0;i<str.size()-1;i++){
        c[i]=str[i]+str[i+1];
    }
    c[i]=str[0]+str[str.size()-1];
    int len=strlen(c);
    for(int i=0;i<len;i++){
        cout<<c[i];
    }
 
 
    return 0;
}
附加题2 删数字  查看测评数据信息

【题目描述】

奶牛在数学课上学习了整除的概念。农夫 Farmer John 为了考验它的数学水平,于是在白纸上写了正整数 T。由于农夫不喜欢数字 0,所以正整数 T 是不含数字 0 的。奶牛可以删除 T 的若干位数字,剩下来的数字从左到右构成一个正整数 P,使得正整数 P 必须是 5 的倍数。奶牛有多少种不同的删除方案?具体请看样例解释。

【输入格式】

第一行,一个正整数 T。

【输出格式】

一个整数,奶牛不同的删除方案数。

【注意事项】

1、奶牛可以删除 0 个数字(即不删除任何数字)。

2、奶牛不能把 T 全部删除掉。即至少要剩下 1 位数字。

3、由于 T 的位数可能较长,建议用字符串形式读入,详细见样例三。

【输入样例一】

1256

【输出样例一】

4

【样例一解释】

奶牛有 4 种不同的删除方案:

第 1 种方案:删除T 的第四位数字,剩下的P=125,是 5 的倍数。

第 2 种方案:删除T 的第一位和第四位数字,剩下的P=25,是 5 的倍数。第 3 种方案:删除T 的第二位和第四位数字,剩下的P=15,是 5 的倍数。

第 4 种方案:删除T 的第一位、第二位、第四位数字,剩下的P=5,是 5 的倍数。

【输入样例二】

115

【输出样例二】

4

【样例二解释】

奶牛有 4 种不同的删除方案:

第 1 种方案:不删除任何数字,剩下的P=115,是 5 的倍数。

第 2 种方案:删除T 的第一位数字,剩下的P=15,是 5 的倍数。第 3 种方案:删除T 的第二位数字,剩下的P=15,是 5 的倍数。

第 4 种方案:删除T 的第一位、第二位数字,剩下的P=5,是 5 的倍数。

【输入样例三】

1234567899876543211234567891234667891234667895

【输出样例三】

35184376291344

【数据范围】

测试点序号 数据说明

#1 T 是两位数

#2 T 是两位数

#3 T 是三位数

#4 T 是三位数

#5 T 的位数的范围是 30 位至 60 位

#6 T 的位数的范围是 30 位至 60 位

#7 T 的位数的范围是 30 位至 60 位

#8 T 的位数的范围是 30 位至 60 位

#9 T 的位数的范围是 30 位至 60 位

#10 T 的位数的范围是 30 位至 60 位

【温馨提示】

后 6 个测试点,答案可能较大,C++的请用 long long 类型。

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
typedef long long LL;
string s;
LL a[N],ans;
signed main(){
	cin>>s;
	a[0]=1;
	for(int i=1;i<=80;i++)a[i]=a[i-1]*2;
	for(int i=s.size()-1;i>=0;i--){
		if(s[i]=='5'){
			ans+=a[i];
		}
	}
	cout<<ans<<endl;
	return 0;
}
附加题1 漂亮串 查看测评数据信息

对于一个长度为L的字符串S,如果它可以通过如下的步骤生成,那么S就是“漂亮串”:

(1)一开始,S是空串。

(2)重复第(3)步共L次。

(3)第i步就是把第i个小写字母添加到S的最左边或者最右边。 显然,第1小写字母是'a', 第2个小写字母是'b',......

例如: "a", "ba", "ab", "bac" , "ihfcbadeg"都是“漂亮串”。 "z", "aa", "ca", "acb", "xyz" , "ddcba" 都不是”漂亮串“。

【输入格式】

多组测试数据。

第一行,一个整数t,表示有t组测试数据。1<=t<=10000。

接下来有t行,每行一个长度不超过26的字符串,全部由小写字母构造。

【输出格式】

共t行,每行对于一组输入,如果是”漂亮串"输出"YES",否则输出"NO"。

【输入】

3

a

ba

xy

【输出】

YES

YES

NO

#include<bits/stdc++.h>
using namespace std;
string s; 
int n;
int main(){
    cin>>n;
    while(n--){
        cin>>s;
        int x=0,y=s.size()-1;
        int flag=1;
        while(x<y){
            if(s[x]-s[y]==1||s[x]-s[x+1]==1)x++;
            else if(s[y]-s[x]==1||s[y]-s[y-1]==1)y--;
            else{
                flag=0;
                break;
            }
        }
		if(s[x]=='a'&&flag==1)cout<<"YES"<<endl;
    	else cout<<"NO"<<endl;
    }
    
    return 0;
}

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值