版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六讲,字符串处理,ACM算法与程序设计,2/30,一个简单的字符串操作的例子,#include #include char strl = “The quick brown dog jumps over the lazy fox”; char str250 =“The QUICK brown dog Jumps over the lazy fox”; char str340 =“The QUICK brown dog Jumps over the lazy fox”; /错误:字符串共有43个字符,需要一个长度至少为44的字符串变量存储。 /易忽略在字符串的末尾要添加表示结束的额外标志字符/0
2、。 char str450; void main(void) int result; str4 =“The QUICK brown DOG jumps over the lazy fox”; /错误:不能将一个字符串常量赋值给另一个字符串变量。 str4=str2; /错误:不能将一个字符串变量赋值绘另一个字符串变量 str4=str1; /错误:不能将一个字符串变量赋值给另一个字符串变量 printf(“Compare strings:nt%snt%snn”,strl,str2); ,3/30,Look and Say,1、链接地址 2、题目内容 The look and say seque
3、nce is defined as follows. Start with any string of digits as the first element in the sequence. Each subsequent element is defined from the previous one by verbally describing the previous element. For example, the string 122344111 can be described as one 1, two 2s, one 3, two 4s, three 1s. Therefo
4、re, the element that comes after 122344111 in the sequence is 1122132431. Similarly, the string 101 comes after 1111111111.,4/30,Input The input consists of a number of cases. The first line gives the number of cases to follow. Each case consists of a line of up to 1000 digits. Output For each test
5、case, print the string that follows the given string. Sample Input 3 122344111 1111111111 12345 Sample Output 1122132431 101 1112131415,5/30,3、解题思路,本题是处理重复子串的问题。虽然输入的都是数字,但应当把它们当成字符串处理。 由于本题时限一秒,每个字符串的长度多达1000位,所以,不好的算法容易超时。 scanf和printf所用的时间大大少于cin和cout所消耗的时间。由于本题需要频繁输出,采用cout则会超过一秒;但使用printf则不会超过一
6、秒。这点是ACM竞赛中节约时间的赏识。一般地,由于cin和cout调试很方便,所以调度期间使用它们,但是提交判题系统后,如果发现超时,可尝试将cin和cout改为scanf和printf,看看是不是由于输入输出过于频繁而导致的。,6/30,4、参考程序,#include #include int main() char s1001,t; int c,i,j,n,len,temp; scanf(%d,7/30,4、参考程序,for(j=0;jlen;j+) if(sj=t) temp+; if(j=len-1) printf(%d%c,temp,t); else printf(%d%c,temp
7、,t); t=sj; temp=1; if(j=len-1) printf(%d%c,temp,t); printf(n); return 0; ,8/30,Abbreviation,1、链接地址 2、题目内容 When a Little White meets another Little White: Little White A: (Surprised) ! Little White B: ? Little White A: You Little White know SHDC? So unbelievable! Little White B: You are little white!
8、 Little white is you! What is SHDC you are talking about? Little White A: Wait. I mean Super Hard-disc Drive Cooler. Little White B: I mean Spade Heart Diamond Club. Duck talks with chicken -_-/ Little White A: Duck. chicken. faint!,9/30,-quote from qmd of Spade6 in CC98 forum. Sometimes, we write t
9、he abbreviation of a name. For example IBM is the abbreviation for International Business Machines. A name usually consists of one or more words. A word begins with a capital letter (A - Z) and followed by zero or more lower-case letters (a - z). The abbreviation for a name is the word that consists
10、 of all the first letters of the words. Now, you are given two names and asked to decide whether their abbreviations are the same.,10/30,Input Standard input will contain multiple test cases. The first line of the input is a single integer T which is the number of test cases. And it will be followed
11、 by T consecutive test cases. There are four lines for each case. The first line contains an integer N (1 = N = 5), indicating the number of words in the first name. The second line shows the first name. The third line contains an integer M (1 = M = 5), indicating the number of words in the second n
12、ame. The fourth line shows the second name. Each name consists of several words separated by space. Length for every word is less than 10. The first letter for each word is always capital and the rest ones are lower-case.,11/30,Output Results should be directed to standard output. The output of each
13、 test case should be a single line. If two names abbreviations are the same, output SAME, otherwise output DIFFERENT.,12/30,Sample Input 3 4 Super Harddisc Drive Cooler 4 Spade Heart Diamond Club 3 Shen Guang Hao 3 Shuai Ge Hao 3 Cai Piao Ge 4 C P C S Sample Output SAME SAME DIFFERENT,13/30,3、解题思路,本
14、题是比较两个缩写词是否相同,而缩写词又是从一个包含多个单词的名字中合成的。每次读入一个单词,然后取出它的第一个单词,连接在字符串上,就组成一个缩写词。 本题的难点在单词的读取控制上,对于输入数据的控制,是ACM竞赛中考查的一个重要方面。 另外,大家可以试试,使用printf输出比使用cout输出快很多。,14/30,4、参考程序,#include #include int main() char s11,ssa6,ssb6; int i,j,t,n; scanf(%d, ,15/30,Caesar 密码 South Central USA 2002,DescriptionJulius Caes
15、ar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。,密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U,16/30,I
16、nput最多不超过100个数据集组成。每个数据集由3部分组成: 起始行:START 密码消息:由1到200个字符组成一行,表示Caesar发出的一条消息 结束行:END 在最后一个数据集之后,是另一行:ENDOFINPUT Output每个数据集对应一行,是Caesar 的原始消息。,17/30,Sample InputSTART NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHT
17、SI NS WTRJ END START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END ENDOFINPUT Sample OutputIN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THA
18、N HE,18/30,问题分析,问题需要将密码消息中的每个字母分别进行相应的变换。 关键之处是识别输入数据中的消息行、读入消息行的数据。 scanf函数使用输入字符串时,每个字符串中不能有空格。 gets函数一次可读入一行,但有可能会导致warning message fgets(str, sizeof str, stdin) = gets(str),19/30,解密时,需将消息中单词的字符串作为普通数组,一次变换其中每个字母。 需用以下几个字符串处理函数: gets:读入一行字符串,允许包含空格 strcmp:识别消息行的start和end strlen:计算加密消息中的每个单词的长度,20
19、/30,程序,#include #include void decipher (char message); void main() char message201; gets(message); while(strcmp(message, “START” = 0) decipher(message); printf(“%sn”, message); gets(message); return; ,21/30,void decipher(char message) char plain27=“VWXYZABCDEFGHIJKLMNOPQRSTU”; char cipherEnd201; int
20、 i,cipherLen; gets(message); cipherLen = strlen(message); for(i = 0; i=A ,22/30,487-3279 Central North America 1999,Description企业喜欢用容易被记住的电话号码。让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语。例如,你需要给滑铁卢大学打电话时,可以拨打TUT-GLOP。有时,只将电话号码中部分数字拼写成单词。当你晚上回到酒店,可以通过拨打310-GINO来向Ginos订一份pizza。让电话号码容易被记住的另一个办法是以一种好记的方式对号码的数字进行分
21、组。通过拨打必胜客的“三个十”号码3-10-10-10,你可以从他们那里订pizza。,23/30,电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。电话拨号盘提供了从字母到数字的映射,映射关系如下: A, B, 和C 映射到 2 D, E, 和F 映射到 3 G, H, 和I 映射到 4 J, K, 和L 映射到 5 M, N, 和O 映射到 6 P, R, 和S 映射到 7 T, U, 和V 映射到 8 W, X, 和Y 映射到 9,24/30,Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 TUT-GLOP的标准格式是888-4567,310-GI
22、NO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。 如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号) 你的公司正在为本地的公司编写一个电话号码薄。作为质量控制的一部分,你想要检查是否有两个和多个公司拥有相同的电话号码。,25/30,Input输入的格式是,第一行是一个正整数,指定电话号码薄中号码的数量(最多100000)。余下的每行是一个电话号码。每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。每个电话号码中只会刚好有7个数字或者字母。 Output对于每个出现重复的号码产生一行输出,输出是号码的标准格式紧跟一个空格然后是它的重复次数。
23、如果存在多个重复的号码,则按照号码的字典升序输出。如果输入数据中没有重复的号码,输出一行: No duplicates.,26/30,Sample Input 12 4873279 ITS-EASY 888-4567 3-10-10-10 888-GLOP TUT-GLOP 967-11-11 310-GINO F101010 888-1200 -4-8-7-3-2-7-9- 487-3279 Sample Output 310-1010 2 487-3279 4 888-4567 3,27/30,问题分析,关键是判断输入的电话号码中是否有重复号码 解决方法: (1)将各种电话号码表示转换成标
24、准表示一个长度为8的字符串,前3个字符是数字、第4个字符是一、后4个字符是数字。 (2)根据电话号码的标准表示,搜索重复的电话号码。办法是对全部的电话号码进行排序,这样相同的电话号码就排在相邻的位置。输出重复的电话号码时,按照号码的字典升序进行输出。,28/30,解决方案,用一个二维数组telNumbers1000009来存储全部的电话号码。每一行存储一个电话号码的标准表示。每读入一个电话号码首先将其转换成标准表示然后存储到二维数组telNumbers中。 全部电话号码都输入完毕后将数组telNumbers作为一个一维数组。其中每个元素是一个字符串用CC+提供的函数模板sort对其进行排序。 用字符串比较函数strcmp比较telNumbers中相邻的电话号码判断是否有重复的电话号码,并计算重复的次数。,29/30,#include #include #include char map =“22233344455566677778889999”; /map
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 早绝经与绝经女性骨质疏松防治指南总结2026
- 2025朔州市朔城区神头职业中学校工作人员招聘考试试题
- 2025景德镇市体育运动学校工作人员招聘考试试题
- 2026年高考作文终极押题猜想新高考
- 基坑自动化监测专项施工方案
- 2026年美妆基因检测定制报告及未来五至十年精准美容报告
- 2026年四川省绵阳市中考数学模拟预测题
- 2026年制造业创新报告及工业机器人应用技术发展报告
- 幼儿园角色扮演游戏幼儿语言复杂度变化-基于2023年角色区对话录音词汇密度分析
- 智能精准教研在小学音乐课程开发中的创新与实践研究教学研究课题报告
- 全国预防接种技能竞赛实践操作训练题库及答案
- 预制梁架设安全培训课件
- 教师相关法律知识培训课件
- 销售abc法则课件
- 生产设备维修及保养记录表
- 制药企业成本核算流程
- 藏医霍尔美疗法课件
- 2025年化工厂中控员考试题及答案
- 2025年副高卫生职称-临床医学类-肿瘤外科学(副高)代码:030历年参考题库含答案解析
- 口腔美学修复病例分析与应用
- 2025至2030中国有机鸡蛋行业市场深度研究与战略咨询分析报告
评论
0/150
提交评论