解决字符串问题的基础知识

来源:互联网 发布:矩阵的n次方怎么求 编辑:程序博客网 时间:2024/06/06 08:30
                解决字符串问题的基础知识

首先保证以下问题已熟练掌握:
1、 字符串的常用处理函数能熟练调用
2、 判断回文;
3、 输入一个字符串,统计数字字符‘0’~‘9’分别出现的次数;
4、 能将任意长的数字串转化成整数(如大整数处理就需要此技术);
5、 删除一串字符中的指定字符,如删除“AB***CDE*FG***HIJ**”中的所有号,或者前缀号、后缀*号。
6、 子串定位。(有很多优化算法,目前可只掌握最基础,也可以调用现成的库函数,但个人必须掌握简单匹配技术)

//////////////////////////////////////////////////////////////
【检测病毒】(重庆理工大学第一届大学生程序设计大赛)
【问题描述】
计算机病毒是一段人为编制的计算机程序代码。病毒能使自身的代码强行传染到一切符合其传染条件的未受到传染的文件(程序)之上。病毒检测的主要方法是根据计算机病毒的关键字(或特征程序段内容),在特征分类的基础上建立的病毒检测技术。请编制程序检测文件是否含有某种计算机病毒的关键字,为了方便,假设供检验的文件格式为文本文件(多数情况下应该是程序)。
【输入】输入文件名“virusin.txt”
输入文件的第一行为计算机病毒程序中的关键字,第2行为一个字符串(正文),字符串的长度小于5000。
【输出】输出文件名“virusout.txt”
计算机病毒程序中的关键字在正文中的起始位置。
程序运行后结果示例:
【样例输入】
Languages
The School of Foreign Languages (SFL), founded in June 2002, is a department which cultivates English majors and college English students. There is more than 60 teaching staff including 9 associate professors, 29 instructors and 30 teachers with postgraduate degrees (including graduate students).
【样例输出】
23

//////////////////////////////////////////////////////////////////////

【单词问题】(重庆理工大学第四届大学生程序设计大赛试题.第2题)
【问题描述】
给出一个完整的句子,这个句子中不包含不可见字符或者空格,于是在这个句子中有许多不同的单词。一个单词是指一串连续的最长的英文字母(大写或小写)。例如”#abc#”中,”abc”就是一个单词,而”ab”,”bc”都不算单词。
【输入】输入文件名“word.in”
输入一个句子,只包含可见字符(不包含空格)。句子长度不超过 100。
【输出】输出文件名“estdout.pc2”
按单词出现的顺序输出不同的单词。如果一个单词出现多次则只有第一次出现时输出。
程序运行后结果示例:
【样例输入】
Wa_Study_Wa_Everyday_Wa_Daxia
【样例输出】
Wa
Study
Everyday
Daxia

//////////////////////////////////////////////////////////////////////////////////////

【罗马数字】 (重庆理工大学第四届大学生程序设计大赛试题.第3题)
【问题描述】
古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!
罗马数字的表示主要依赖以下几个基本符号:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
这里,我们只介绍一下1000以内的数字的表示法。
单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300 XX表示20,但这个规则仅适用于I X C M,150并不用LLL表示。
如果相邻级别的大单位在左,小单位在右,表示大单位加上小单位,如XI表示11;如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX表示9,IV表示4 ,XL表示40,更多的示例参见下表,你找到规律了吗?

I,1
II,2
III,3
IV,4
V,5
VI,6
VII,7
VIII,8
IX,9
X,10
XI,11
XII,12
XIII,13
XIV,14
XV,15
XVI,16
XVII,17
XVIII,18
XIX,19
XX,20
XXI,21
XXII,22
XXIX,29
XXX,30
XXXIV,34
XXXV,35
XXXIX,39
XL,40
L,50
LI,51
LV,55
LX,60
LXV,65
LXXX,80
XC,90
XCIII,93
XCV,95
XCVIII,98
XCIX,99
C,100
CC,200
CCC,300
CD,400
D,500
DC,600
DCC,700
DCCC,800
CM,900
CMXCIX,999

【输入】输入文件名“RomanNumber.in”
第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。
【输出】输出文件名“estdout.pc2”
要求程序输出n行,就是罗马数字对应的十进制数据。
程序运行后结果示例:
【样例输入】
3
LXXX
XCIII
DCCII
【样例输出】
80
93
702

【思考:】已知阿拉伯数字,求对应的罗马数字??

////////////////////////////////////////////////////////////////////////////////////

【T9键盘】(重庆市第四届大学生程序设计大赛试题 第5题)(与“罗马数字”技术类似)
【问题描述】
这里写图片描述
这里写图片描述

///////////////////////////////////////////////////////////////////////
【周期串】
/* 输入字符串,求其最小周期
如,输入: abcabcabcabc (注意:其周期可以是3、6、12)
输出: 3
*/

////////////////////////////////////////////////////////////////

【自动纠正拼写错误】(重庆市第2届大学生程序设计大赛试题 第4题)

输入文件:auto.in 输出文件:estdout.pc2

问题描述:
某些文件编辑器提供纠正英文单词拼写错误的功能。你们本次要解决的问题就是实现这样一个能够完成自动纠正拼写错误(ACM)功能的应用程序。
ACM能够纠正以下几类的单词拼写错误:
1.漏写或多写1个字母,例如单词“letter”被写成了“leter”,或者是“letter”被写成了“lettter”。
2.写错了一个字母,例如“letter”被写成了“ketter”。
3.两个相邻的字母书写顺序弄错了,例如“letter”被写成了“lettre”。
ACM的纠错功能是基于一个已知单词集的字典来进行的。每当一个文档中含有字典中不存在的单词时,ACM就会试图用字典中与该单词最相似的单词替代它。ACM对单词是相似的有这样的定义:只要两个单词能够按照上面叙述的3类拼写错误规则中的任何一种进行相互转换,就认为这两个单词是相似的。如果在字典中没有发现相似的单词,就在原文本中保留这个未知的单词。

输入:
在输入文件的第1行里将给出字典中已知的单词数量:整数n,其中0<=n<=1000。在紧接着的n行里包含有字典中的n个单词。在这n行后的第1行里将给出1个正整数q,其中0<=q<=1000,它表示需要查询单词的数量。在这之后的q行里包含有q个需要查询的单词。你可以假设在输入文件中每一个单词只能由26个小写字母(’a’~’z’)构成。

输出:
针对每一个需要查询的单词,输出一行字符串。要求:该字符串以需要查询的单词开始,并从下面3个黑体描述中选择一个合适的字串添加在后。
1.如果需要查询的单词在字典中就添加字串“is correct”
2.如果需要查询的单词不在字典中,则添加字串“is a misspelling of ”,其中 是指字典与需要查询的单词相似的单词。若x有多个,则选择在字典中出现最早的那个单词输出。
3.如果前面两种情况都不满足,则添加字串“is unknown”。

输入样本:
10
this
is
a
dictionary
that
we
will
use
for
us
6
su
as
the
dictionary
us
willl

输出样本:
su is a misspelling of us
as is a misspelling of is
the is unknown
dictonary is a misspelling of dictionary
us is correct
willl is a misspelling of will

0 0
原创粉丝点击