字符串处理(二)

第1题 篮球比赛 查看测评数据信息
学校举行篮球比赛,请设计一个计分系统统计KIN、WIN两队分数,并输出分数和结果!

如果平分就输出'GOOD',否则输出获胜队名!

输入格式

输入数据共n+1行, 第1行n;

然后有n行,每行输入每次得分代号和得分队名,两者间有空格!

('A'表示一分,'B'表示2分,'C'表示3分,队名确保只有2个!)

输出格式

输出数据共1行,输出分数和结果 KIN:WIN的分数 获胜队名,平分输出'GOOD'。

输入/输出例子1

输入:

5

B KIN

C WIN

B WIN

A KIN

C KIN

输出:

6:5 KIN

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long n,x,y;
char c;
string s;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>c>>s;
        if(s=="KIN"){
            if(c=='A')x+=1;
            else if(c=='B')x+=2;
            else x+=3;
        }
        else {
            if(c=='A')y+=1;
            else if(c=='B')y+=2;
            else y+=3;
        }
    }
    cout<<x<<":"<<y<<" ";
    if(x>y)cout<<"KIN";
    else if(x<y)cout<<"WIN";
    else cout<<"GOOD";
    return 0;
}

第2题 旋转单词 查看测评数据信息
今天的英语课,王老师为了复习以前学过的单词,提高学生的学习兴趣,想出了一个主意:

读入M组数据,其中每组数据有一个单词L(单词长度≤36个字符)和一个整数N(1≤N≤36),从该单词最末位开始逐位移到单词的开头,如果还没达到N值,则再从末位开始移动,直到达N 值为止,求移N位后的新单词。你能编程帮助贝贝最快完成任务吗?

输入格式

输入数据共2*m+1行,第一行为整数m,表示有m对字符串和整数;

接下来的2*m行,第2行开始为具体数据,每一组数据有2行,第1行字串s,第2行为n。

输出格式

共m行,每行为旋转后的字串。

输入/输出例子1

输入:

1

computer

3

输出:

tercompu

输入/输出例子2

输入:

1

program

1

输出:

mprogra

输入/输出例子3

输入:

1

ABCDEFGH

35

输出:

FGHABCDE

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
string len;
long long s,n;
int main(){
    cin>>n;
    while(n--){
        cin>>len>>s;
        for(int i=len.size()-s%len.size();i<len.size();i++){
            printf("%c",len[i]);
        }
        for(int i=0;i<len.size()-s%len.size();i++){
            printf("%c",len[i]);
        }
        printf("\n");
    }
	return 0;
}

第3题 数根 查看测评数据信息
正整数的数根指的是该整数各位数字的和。如果结果是一位数,那么这个数就是数根;如果结果有两个或两个以的数字,那么就只需将结果的各位数字再相加直到只是一位数字。

例如正整数24,2和4相加等于6,因为6是一位数,6就是24的数根;再如正整数39,3和9相加等于12,因为12不是一位数,所以必须重复该过程,把1和2相加等于3,这是一位数,也是39的数根。

输入格式

仅一行,一个整数,这个整数不超过100位。

输出格式

仅一行,一个数,该数是输入的整数的数根。

输入/输出例子1

输入:

123

输出:

6

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int f(int x){
    int y=0;
    while(x>=1){
        y+=x%10;
        x/=10;
    }
    while(y>9){
        y=f(y);
    }
    return y;
}
string s;
int sum;
int main(){
    while(cin>>s){
        for(int i=0;i<s.size();i++){
            sum+=s[i]-'0';
        }
        cout<<f(sum)<<'\n';
    }
    return 0;
}

第4题 提取整数再求和 查看测评数据信息
有一行由任意字符组成的字符串,请求出其中所有数的和。最长连续的数不超过18位。

输入格式

一个字符串,长度小于100000.

输出格式

一个整数。

输入/输出例子1

输入:

aAs123h+45dw

输出:

168

样例解释

答案不超过long long范围。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
string s;
long long x,t; 
int main(){
	getline(cin,s);
	for(int i=0;i<s.size();i++){
		if(s[i]>='0'&&s[i]<='9'){
			t=0;
			for(;i<s.size()&&s[i]>='0' &&s[i]<='9';i++){
				t=t*10+(s[i]-'0');
			}
			x+=t; 
		}
	}
	cout<<x;
	return 0;
} 

第5题 纳米文 查看测评数据信息
一天,摇摇很荣幸地来到了纳米星球。可他发现一种奇怪的文字------纳米文,就研究起来了。经过不懈的努力,摇摇终于发现改怎么把纳米文转换成地球的文字了:纳米文是一串字符,然后按照下面有一个数字n,然后有n条命令,每条命令有1个或2个字符。如果只有1个字符,就把字符串中的所有这个字符去掉。如果有2个字符,就是把字符串中的所有第一个字符换成那第二个字符。现在摇摇给你纳米文,请把它转成地球文。

输入格式

输入数据共n+2行,第1行:一个字符串(这个字符串可能有空格)。

第2行,一个正整数n。

第3到n+2行,共n行命令字符。

输出格式

输出数据仅1行,即转换后的地球文。

输入/输出例子1

输入:

g31a1333g3ccl11t13hhg

7

z

1

h

c p

t e

g

3

输出:

apple

样例解释

g31a1333g3ccl11t13hhg

7

z   {去掉所有的"z"}

1   {去掉所有的"1"}

h   {去掉所有的"h"}

c p   {把所有的"c"换成"p"}

t e   {把所有的"t"换成"e"}

g   {去掉所有的"g"}

3   {去掉所有的"3"}

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    int n;
    getline(cin,s); 
    cin>>n; 
    cin.ignore(); 
    for(int i=0;i<n;i++){
        string x;
        getline(cin,x); 
        if(x.size()==1){
            size_t pos=s.find(x);
            while(pos!=string::npos){
                s.erase(pos,1);
                pos=s.find(x,pos);
            }
        } 
		else if(x.size()==3){
            size_t pos=s.find(x[0]);
            while(pos!=string::npos){
                s[pos]=x[2]; 
                pos=s.find(x[0], pos+1);
            }
        }
    }
    cout<<s;
    return 0;
}

第6题 单词缩写 查看测评数据信息
众所周知,我们通常用一个单词的首字母组成的字符串来代替一个很长的英文名称,例如:ACM是"Association for Computing Machinery"的缩写。现在我们给出一些单词序列,要求按以下规则求出该单词序列的缩写。(缩写有可能是空的)

1.凡是字母个数小于等于2的单词不要。

2."and"、"for"、"the"这三个单词不要(包括大小写的情况)。

3.除1、2点外的单词取首字母的大写形式按顺序连起来。

输入格式

第一行为一个整数n,表示要求的单词缩写的个数。(n<=100)

接下来n行,每行一个长度小于100的单词序列,每个单词都是由大写或小写字母组成,每个单词之间有一个空格。

输出格式

输出n行,每行为对应的单词缩写。

输入/输出例子1

输入:

5

Association for Computer Machinery

Institute of Electricaland Electronics Engineers

SUN YAT SEN UNIVERSITY

The Lord of the Rings

netease

输出:

ACM

IEEE

SYSU

LR

N

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
string s,c[4]={" AND" , " FOR ", " THE "};
int n;
int main(){
	cin>>n;
	getline(cin,s);
	while(n--){
		getline(cin,s);
		for(int i=0;i<s.size();i++)
		s[i]=toupper(s[i]);
		s=" "+s+" ";
		for(int i=0;i<3;i++)
            while(s.find(c[i])!=-1)
                s.erase(s.find(c[i])+1,4);
		for(int i=0;i<s.size()-1;i++)
			if(s[i]==' '&&s[i+1]!=' '&&s[i+2]!=' '&&s[i+3]!=' ')
				cout<<s[i+1];
		cout<<endl;
	}
	return 0;
}

第7题 电文加密 查看测评数据信息
在军事上,通讯的工具往往是收发电文,但敌方会利用仪器设备接收到电文,所以为了使电文保密,可以按一定的规律将电文转换成密码再发送,收报人再按约定的规律将其译回原文,现按这样的规律加密英文电文:将26个英文字母按顺时针围成一圈,把要发送的英文字母转变成其后的第N(1≤N≤25)个字母(除英文字母外,电文中的其它字符不用加密)。例如:如图1,把大写字母A转变成其后的第3个字母是D,把大写字母Y转变成其后的第3个字母是B,小写字母的加密方法也一样,如把b转变成其后的第3个字母是e,把y转变成其后的第三个字母是b。例如电文"1Day."按把字母转变成其后的第3个字母的方法进行加密是:"1Gdb."。已知"A"的ASCII是65,"a"的ASCII是97。

输入格式

输入数据仅1行:A,N (A为英文字串,N为转换为其后的第N个字母,1≤N≤25,英文字串与N之间用','隔开)。

输出格式

输出数据仅1行,把英文字串A$转换为其后的第N个字母的新字串。

输入/输出例子1

输入:

Tow.,4

输出:

Xsa.

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
string a;
int main (){
    getline(cin,a);
    int t=a.find(',')+1,s=0;
    for(int i=t;i<a.size();i++){
        s=s*10+(a[i]-'0');
        s%=26;
    }
    for(int i=0;i<t-1;i++){
	    if(a[i]>='a'&&a[i]<='z')
		    for(int j=1;j<=s;j++){ 
			    a[i]++;
			    if(a[i]>'z')a[i]='a';
		    }
	    else if(a[i]>='A' &&a[i] <= 'Z')
		    for(int j=1;j<=s;j++){
			    a[i]++;
			    if(a[i]>'Z')a[i]='A';
		    }
	    cout<<a[i];
    }
    return 0;
}

第8 题 统计单词数 查看测评数据信息
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

输入格式

第 1 行为一个字符串,其中只含字母,表示给定单词;

第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【数据范围】

1 ≤ 单词长度≤ 10。

1 ≤ 文章长度≤ 1,000,000。

输出格式

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。

注释:位置的计算包括空格,两个单词之间可能有多个空格

输入/输出例子1

输入:

To

to be or not to be is a question

输出:

2 0

输入/输出例子2

输入:

to

Did the Ottoman Empire lose its power at that time

输出:

-1

样例解释

【输入输出样例 1 说明】

输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。

【输入输出样例 2 说明】

表示给定的单词 to 在文章中没有出现,输出整数-1。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
string f(string a){
    for(int i=0;i<a.size();i++)
        if(a[i]>='A'&&a[i]<='Z')
            a[i]=a[i]-'A'+'a';
    return a;
}
int main(){
	int pos1,pos2,cnt,index;
    string a,b,x;
    cin>>a;
    a=f(a);
    getchar();
    getline(cin,b);
    b=f(b);
    pos1=-1,cnt=0;
    for(;;){
        pos2=b.find(' ',pos1+1);
        x=b.substr(pos1+1,pos2-pos1-1);
		if(x==a){
        	if(!cnt)index=pos1+1;
        	cnt++;
		}
		pos1=pos2;
		if(pos2==-1)break;
    }
    if(!cnt)printf("-1");
    else printf("%d %d",cnt,index);
    return 0;
}
相关推荐
上理考研周导师1 小时前
【单片机原理】第1章 微机基础知识,运算器,控制器,寄存器,微机工作过程,数制转换
算法
檀越剑指大厂1 小时前
【Python系列】Python中的`any`函数:检查“至少有一个”条件满足
开发语言·python
Crazy learner1 小时前
C 和 C++ 动态库的跨语言调用原理
c语言·c++
I_Am_Me_2 小时前
【JavaEE初阶】线程安全问题
开发语言·python
IT猿手2 小时前
基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码
算法·elk·机器学习·matlab·无人机·聚类·强化学习
运维&陈同学2 小时前
【Elasticsearch05】企业级日志分析系统ELK之集群工作原理
运维·开发语言·后端·python·elasticsearch·自动化·jenkins·哈希算法
金士顿4 小时前
MFC 文档模板 每个文档模板需要实例化吧
c++·mfc
ZVAyIVqt0UFji5 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
loop lee5 小时前
Nginx - 负载均衡及其配置(Balance)
java·开发语言·github
SomeB1oody5 小时前
【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
开发语言·后端·rust