《信息奥赛课课通》课件第10单元.ppt

  1. 1、本文档共120页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3. string 的常用函数 (1)length()和size() length()用来返回 string 的长度(字符个数),时间复杂度为O(1)。size()与 length()一样。 (2)clear() clear()用来清空 string 中的所有元素,时间复杂度为O (1)。 (3)substr() Substr(pos,len)返回从 pos 号位置开始、长度为 len 的子串,时间复杂度为O (n)。 (4)insert () 函数 insert ()有多种写法,时间复杂度都是O (n)。insert(pos,string),表示在pos号位置插入字符串string。insert(it,it2,it3),it为原字符串的欲插入位置,it2和it3为待插入字符串的首尾迭代器(左闭右开区间)。 (5)erase() erase()可以删除单个元素,也可以删除一个区间内的所有元素,时间复杂度均为O (n)。删除单个元素用erase(it),it为要删除的元素的迭代器。删除一个区间内的所有元素可以用两种方法。erase(first,last),first为区间的起始迭代器,last为区间的末尾迭代器的下一个地址,也就是左闭右开的区间[first,last)。erase(pos,length),pos为需要删除的字符串起始位置,length为要删除的字符个数。 (6)find() str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;否则返回string::npos。string::npos是一个常数,其本身的值等于-1,但由于是unsigned int类型,因此,也可以认为是unsigned int类型的最大值(4294967295)。str.find(str2,pos),是从str的pos号位开始匹配str2,返回值同str.find(str2)。以上两种写法的时间复杂度都是O(n*m),其中n和m分别为str和str2的长度。 (7)replace() str.replace(pos,len,str2)表示把str从pos号位开始、长度为len的子串替换为str2。也可以写成str.replace(it1,it2,str2),表示把str的迭代器it1~it2范围内(左闭右开区间)的子串替换为str2。时间复杂度都是O(str.length)。时间复杂度都是 O(str.length)。 4. string 的应用举例 例1、字符串匹配 【问题描述】 现定义两个仅由大写字母组成的字符串的匹配程度如下:将某一字符串的首字符与另一字符串的某一字符对齐,然后后面的字符也一一对齐,直至某一字符串的串尾为止。对于每一组对齐的两个字符,若这两个字符相等,则计数。匹配程度为每种对齐方法的计数的最大值。最后计算这个匹配程度的 2 倍,与两串总长度的最大比值。 【输入格式】 多组数据,每组一行两个字符串,中间用一个空格隔开,以 -1 结束输入。 【输出格式】 对于每组数据,输出两个字符串的最大匹配数与两串总长度的比值,具体格式见输出样例。 【输入样例】 CAR CART TURKEY CHICKEN MONEY POVERTY ROUGH PESKY -1 【输出样例】 appx(CAR,CART) = 6/7 appx(TURKEY,CHICKEN) = 4/13 appx(MONEY,POVERTY) = 1/3 appx(ROUGH,PESKY) = 0 【问题分析】 本题是简单字符串处理,暴力枚举两串匹配的首字母,不断更新最大匹配值即可,最后的答案需要对最大匹配值和两串总长进行辗转相除。 参考程序见教材560-561页。 例2、字符串乘方 【问题描述】 给定两个字符串 a 和 b,定义 a*b 为它们的连接。例如,如果 a= “ abc “ 而 b= “ def “ ,则 a*b=“ abcdef “ 。如果将连接考虑成乘法,一个非负整数的乘方将用一种通常的方式定义:a^0= “ “ (空字符串),a^ (n+1)=a*(a^n)。 【输入格式】 每一个测试样例是一行可打印的字符,用 s 表示。s 的长度至少为 1,且不会超过 100 万。 最后的测试样例后面将是一个点号作为一行。 【输出格式】 对于每一个 s,你应该打印最大的 n,使得存在一个 a,让 s=a^n 。 【输入样例】 abcd aaaa ababab . 【输出样例】 1 4 3 【问题分析】 分析题意可知,有循环节必定为字符串长度的约数,枚举约数判断即可。另外,由于本题输入量很大,如果需要请用 scanf 代替 cin,从而避免超时。 参考程序见看教材562页。 实践巩固 第 8 课 algorith

您可能关注的文档

文档评论(0)

kbook + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档