字符串处理试题.docx
《字符串处理试题.docx》由会员分享,可在线阅读,更多相关《字符串处理试题.docx(16页珍藏版)》请在冰豆网上搜索。
字符串处理试题
字符串处理
字符串分离
含字符串的模拟题
数值转与字符串互相转换
zbroj
数根
P1907统计字母
【问题描述】
某次科研调查时得到了n个大写字母,这些大写字母的个数不超过50000。
现在需要统计这些字母各自出现的次数,并按照字母从小到大的顺序输出统计结果。
【输入格式】
第一行是整数n,表示大写字母的个数;(1<=n<=100000)
第2~n+1每行一个大写字母。
【输出格式】
按照字母从小到大的顺序输出。
每行输出两个整数,分别是字母和该字母出现的次数,其间用一个空格隔开。
【样例输入1】
8
A
B
C
A
B
Z
W
Z
【样例输出1】
A2
B2
C1
W1
Z2
P1254手机
【问题描述】
手机的键盘是这样的:
12abc3def
4ghi5jkl6mno
7pqrs8tuv9wxyz
*0#
要按出英文字母就必须要按数字键多下。
例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。
0键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
【输入格式】
一行一个句子,只包含英文小写字母和空格,且不超过200个字符。
【输出格式】
一行一个整数,表示按键盘的总次数。
【样例输入1】
ihaveadream
【样例输出1】
23
P1522字符归类
【问题描述】
输入一篇文章,归类统计大写字母,小写字母、数字字符,还有其他字符的个数。
【输入格式】
第1行输入n
以下有n行,每行最多不超过200个字符。
【输出格式】
输出有4行
第一行大写字母个数
第二行小写字母个数
第三行数字字符的个数
第四行其他字符的个数
【输入样例】
2
23123ASJDFHAKJSaafd%^&$133
faskasdfjfaADFAKIE1231564()(
【输出样例】
A-Z:
17
a-z:
15
0-9:
15
qita:
12
【数据规模】
1<=n<=10
P1053乐乐的图形(vhist)
【问题描述】
乐乐最近玩起了字符游戏,规则是这样的:
读入四行字符串,其中的字母都是大写的,乐乐想打印一个柱状图显示每个大写字母的频率。
你能帮助她吗?
【输入格式】
输入文件共有4行:
每行为一串字符,不超过72个字符。
【输出格式】
与样例的格式保持严格的一致。
【输入样例】
THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG.
THISISANEXAMPLETOTESTFORYOUR
HISTOGRAMPROGRAM.
HELLO!
【输出样例】
说明:
1.输出的相邻字符间有一个空格。
2.最后一行的26个大写字母每次必须输出。
3.大写字母A所在的第一列前没有空格。
P2219分离句子
【问题描述】
小A学英语有个毛病,总喜欢把很多单词写在一行里,现请你来帮小A将句子中的单词分开来写,一行写一个单词,然后打印出来。
输入一个句子(末尾有句号,每两个单词之间有一个空格),输出分离后的句子。
【输入格式】
输入一个句子(末尾有句号,每两个单词之间有一个空格)
【输出格式】
输出分离后的句子
【输入样例】
Iamaboy.
【输出样例】
I
am
a
boy
P1046动物简介(animal)
【问题描述】
到了动物园,琦琦开心得跳起来。
哗,这里好多动物呀,有老虎,有狮子……,在开心之余,琦琦也不忘妈妈的教导:
观察动物时要认真仔细,还要看动物园附上的动物简介呀。
动物的简介原来还有英文版的呢!
为了卖弄自己的英文水平,琦琦就告诉妈妈每张动物简介里出现了多少次该动物的名称。
注意:
琦琦只认识小写字母,而且她只认得动物的单词,因此她认为monkeys或者smonkey或者smonkeys都是出现了monkey这个词。
你能编程完成琦琦的任务吗?
【输入格式】
输入文件共n+2行:
第1行为数字n(n<=3000),表示该动物的简介共有n行。
第2行为一个单词,表示琦琦认识的动物名称。
接着是n行,每行为一个长度小于250个字符的字符串,表示动物的简介。
【输出格式】
输出文件共1行,为简介里出现了多少次琦琦能识别出的动物的单词。
【输入样例1】
1
monkey
Sheoftenjumpsontomyknees.Iliketogiveherabath.
【输出样例1】
0
【输入样例2】
2
snake
Thesnakeisalongandthinanimal.
Snakeshavenolegsorfeet.
【输出样例2】
1
P1086NBA总冠军
【问题描述】
又要放假了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍。
由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复。
现在请求学过编程的你帮助Ljw,按时间顺序依次输出总冠军的球队(不能重复)。
(NBA从1947A.D到2009A.D)
【输入格式】
第一行是一个整数n(n小于50)。
接下来的n行,每行先是城市名(由大小写字母、空格组成),后是时间(由数字组成)。
二者之间用空格隔开。
【输出格式】
共n行,即排序后的NBA总冠军队伍。
每行先是时间,后是城市名。
二者之间用空格隔开。
【输入样例】
3
Boston1963
Boston1959
Philly1947
【输出样例】
1947Philly
1959Boston
1963Boston
单词缩写(abbr)
【问题描述】
众所周知,我们通常用一个单词的首字母组成的字符串来代替一个很长的英文名称,例如:
ACM是“AssociationforComputingMachinery”的缩写。
现在我们给出一些单词序列,要求按以下规则求出该单词序列的缩写。
(缩写有可能是空的)
1.凡是字母个数小于等于2的单词不要。
2.“and”、“for”、“the”这三个单词不要(包括大小写的情况)。
3.除1、2点外的单词取首字母的大写形式按顺序连起来。
【输入格式】
第一行为一个整数n,表示要求的单词缩写的个数。
(n<=100)
接下来n行,每行一个长度小于100的单词序列,每个单词都是由大写或小写字母组成,每个单词之间有一个空格。
【输出格式】
输出n行,每行为对应的单词缩写。
【输入输出样例】:
abbr.in
abbr.out
5
AssociationforComputerMachinery
InstituteofElectricalandElectronicsEngineers
SUNYATSENUNIVERSITY
TheLordoftheRings
netease
ACM
IEEE
SYSU
LR
N
生日礼物(gift)
【问题描述】
聪明的chnlkw收到了很多礼物,但是作为chnlkw的经纪人萝卜,很想知道chnlkw这次共收到了价值多少的礼物。
Chnlkw对每一件礼物都作了自动的登记。
而经纪人通过网络查找到了它们的价值。
现在请你帮他们计算一下礼物的总价值。
【输入格式】
输入文件gift.in共N+K+1行。
第一行为正整数n,k表示共收到了n件礼物,经纪人查到了k件物品的价值;
接下来的n行,包含礼物的名称(名称不包含空格)和这件礼物件数,中间有且仅有一个空格;
接下来的k行,包含了经纪人查到物品名称和价值,中间有且仅有一个空格;
【输出格式】
输出文件gift.out共1行。
只输出一个数字,表示礼物的总价值;如果无法确定礼物的总价值,则输出Unknow
【输入样例】
46
Apple1
Pear2
Juice4
OkCard5
Apple5
Pear6
OkCard0
Juice2
Car100000
Plane1000000
【输出样例】
25
【数据范围】
对于30%的数据,n,k≤100。
对于70%的数据,n,k≤1000。
对于100%的数据,n≤1000,k≤2000。
所有输入数据保证小于maxlongint。
物品名称的长度≤10
P1857字符串合并
【问题描述】读入两个字符串S1,S2,长度不超过120,把这两个字符串合并成一个串S,规则如下:
如果S1串长度大于S2串的长度,即S1串的第一个字符在前面,后跟S2串的第一个字符,如此重复到最后,反之,则把S2串的第一个字符放前面,后接S1串的第一个字符,一直得重复到结束。
【输入格式】输入为两行,分别为两个字符串,如:
abcd
12345
【输出格式】输出为一行,为合并后的字符串,如上例为:
1a2b3c4d5
【输入样例1】
a
bcd
【输出样例1】
bacd
【输入样例2】
123456
abcd
【输出样例2】
1a2b3c4d56
P1061机器人交警
【问题描述】
某座城市一共有26个交通路口,分别用大写英文字母A、B、……、Z表示。
交通管理部门研制了一批机器人交通警察,并按如下的规则派出这些机器人到交通路口协助指挥交通:
⑴每次派出两名机器人;
⑵当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口上指挥交通;有多个字母相同时,两名机器人需要按字母的先后次序到这些路口上巡逻。
⑶当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(WuXiao)。
假设这些机器人的名字全由大写字母组成。
请你编一个程序,来指挥这些机器人交警的工作。
【输入格式】
第一行输入第一个机器人的名字;
第二行输入第二个机器人的名字。
【输出格式】
⑴当不能派出机器人时,在第一行输出"WuXiao";
⑵当两名机器人在路口上指挥交通时,在第一行输出"ZhiHui",第二行输出路口编号;
⑶当两名机器人在路口上巡逻时,在第一行输出"XLuo",第二行输出巡逻的路口数,第三行输出巡逻线路。
【样例输入1】
LPT
BYHK
【样例输出1】
WuXiao
【样例输入2】
KEYDDD
CHEN
【样例输出2】
ZhiHui
E
【样例输入3】
OPEN
CLOSE
【样例输出3】
XLuo
2
E-O
【样例输入4】
EPSON
SENPUM
【样例输出4】
XLuo
4
E-N-P-S
P1036字符串加密
【问题描述】
TOM找到了一份为一些文件的某些部分加密的工作,加密的部分是一串小写英文字母,加密的规则是这样的:
要是连续出现相同的字母,则把他们替换成这个字母的大写形式,后面紧跟相同字母的个数,并把它之前跟之后的两段字串调换,例如出现bcaaaaaaef则新字符串变成:
efA6bc。
然后从新扫描字串,直到没有出现相同小写字母为止。
【输入格式】
文件只有一行数据:
原始字符串。
【输出格式】
文件只有一行数据:
新字符串。
【输入样例1】
bcaaaaaaef
【输出样例1】
efA6bc
【输入样例2】
cmmmcefffg
【输出样例2】
gM3cF3ce
特别的字符串函数(stringe)
【问题描述】
贝茜发明了一种新的字符串函数,给定一个数字N和一个字符串S,N小于字符串S的长度,定义函数f(N,S)得到一个新的字符串为S的第N位后面的所有字符加上原串;
例如N=2,S="COW",f(N,S)="W"+"COW"="WCOW"。
又如,f(3,"USACO")="CO"+"USACO"="COUSACO"。
贝茜希望做多次这样的操作。
【输入格式】
第一行,一个整数Z,表示有Z组数据。
(Z<=100)
接下来N行,每行三个参数,分别是N_i,C_i,andstr_i表示对字符串str_i重复做C_i次这样的操作。
(0<=N_i【输出格式】
对于每组数据,输出操作后的结果。
【输入样例】
2
23COW
32USACO
【输出样例】
WCOWOWWCOW
SACOCOUSACO
【样例解释】
COW->WCOW->OWWCOW->WCOWOWWCOW
USACO->COUSACO->SACOCOUSACO
P1276填单词
【问题描述】
现有一个N*N(5<=N<=100)的方格,其中格子中为'-'的表示空格,为'#'表示不可填格子.比如:
----#
--##-
-----
-##--
#----
一个单词长度至少为2,并按通常的纵横字谜规则填.上图中,我们可以填写5个横向的单词,可以填4个纵向(向下)的单词.
你的任务是对于给定的方格,求可以有多少个横向和纵向的单词.
【输入格式】
*第一行:
一个整数N
*第二至第N+1行:
第行有N个字母,或者是'#'或者是'-'.表示方格的初始状态.
【输出格式】
*只一行:
有两个用空格分开的整数,分别为横向的单词数和纵向的单词数.
【输入样例】
5
----#
--##-
-----
-##--
#----
【输出样例】
54
zbroj
Description
老师在黑板写了两个整数A和B,让奶牛Bessie做加法运算,Bessie比较笨,可能会数字5和6混淆,则既可能把5错看成了6,也可能把6错看成了5。
问:
Bessie可能得到的最小值和最大值分别是多少。
输入格式:
第一行,两个整数,A和B,1<=A,B<=1000000。
输出格式:
一行,可能得到的最小值和最大值。
样例输入:
1125
样例输出
3637
输入:
14304862
输出:
62826292
输入:
1679658786
输出:
7458085582
数根(digit)
Description
【问题描述】
正整数的数根指的是该整数各位数字的和。
如果结果是一位数,那么这个数就是数根;如果结果有两个或两个以的数字,那么就只需将结果的各位数字再相加直到只是一位数字。
例如正整数24,2和4相加等于6,因为6是一位数,6就是24的数根;再如正整数39,3和9相加等于12,因为12不是一位数,所以必须重复该过程,把1和2相加等于3,这是一位数,也是39的数根。
【输入格式】
输入文件digit.in中有一个整数,这个整数不超过100位。
【输出格式】
输出文件digit.out中仅有一个数,该数是输入的整数的数根。
【样例输入】
123
【样例输出】
6
P1912回文数
【问题描述】
一个整数如果从左向右读和从右向左读是同一个数,叫做回文数。
编写程序:
从键盘读入一个长整型范围内的正整数N,判断是否回文数。
【输入格式】
输入一个正整数N;
【输出格式】
如果是回文数输出“YES”,否则输出“NO”
【输入样例1】
12345
【输出样例1】
NO
【输入样例2】
12321
【输出样例2】
YES
P1998二进制位数
【问题描述】
对于任意输入的两个正的二进制数求和,输出其中中非零的个数,及非零数所在的位置。
(其中小数点后面的位置用负数表示)
例如:
输入11101.1011
110.11
(则和为100100.0111其中非零即1有5个,位置分别在6,3,-2,-3,-4位上。
)
输出为5(非零数的个数,占用一行)
63-2-3-4(非零数的位置,两个数字之间用空格隔开,每行仅有十个这样的数字,超过十个则换到下一行)。
【输入格式】
输入数据占两行,分别为两个由0、1、小数点构成的二进制串
【输出格式】
输出数据占多行,第一行为二进制串中1的个数;第二行之后为二进制串中1的位置。
每行占10个数。
【输入样例】
11101.1011
110.11
【输出样例】
5
63-2-3-4
【数据规模】
总长度<20
P220101数字串
【问题描述】
任意给出一个正整数N,找一个正整数M,使得N×M的值的各位数字全部由数字0和1组成,请找出满足条件的最小的M。
如果N×M的值大于2000000000还没有找到满足条件的M就输出"Nofound"。
【输入样例】
4
【输出样例】
25