字符串处理和STL课件

上传人:我*** 文档编号:143133265 上传时间:2020-08-26 格式:PPT 页数:78 大小:257.50KB
返回 下载 相关 举报
字符串处理和STL课件_第1页
第1页 / 共78页
字符串处理和STL课件_第2页
第2页 / 共78页
字符串处理和STL课件_第3页
第3页 / 共78页
字符串处理和STL课件_第4页
第4页 / 共78页
字符串处理和STL课件_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《字符串处理和STL课件》由会员分享,可在线阅读,更多相关《字符串处理和STL课件(78页珍藏版)》请在金锄头文库上搜索。

1、字符串处理、STL,台州学院2012暑期集训,主要内容,C/C+字符串处理函数 常用的STL 字典树简单介绍 KMP算法简单介绍,C字符串处理函数,求字符串长度 strlen(str); 字符串比较 strcmp(str1, str2); 比较两个字符串,如果相等返回的值为0,如果str1str2则小于0,反之大于0 strncmp(str1,str2,n); 比较str1,和str2前n个字符,返回的值同上 附加 strcat(str1, str2); 表示把str2接到str1上去 strncat(str1,str2,n); n表示连接上st2的前n个给st1,在最后不要加0。,C字符串处

2、理函数,替换 strcpy(str1, str2); 把str2赋值给str1 strncpy(str1, str2, n); n表示复制st2的前n个给st1,在最后要加0。 逆置 strrev(str); 把整个字符串逆置 memset 将一块内存的每一个字节指定为某个值,C字符串处理函数memset,包含头文件:string.h 按字节设置,因此: char a81; memset(a,A,sizeof(a);将81个元素都设为A; int a81; memset(a, 0, sizeof(a); 将81个元素都设为整数0; 但是:int a81; memset(a, 1,sizeof(

3、a);却将所有元素都设为16843009,即二进制:00000001000000010000000100000001 因此该函数可以将一个整型数组全部置为0或-1(自己分析),或者将字符数组全部设为某个字符,C字符串处理函数strchr/strstr,原型:extern char *strchr(char *s,char c); 功能:查找字符串s中首次出现字符c的位置 说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。#include#includeint main() char str=Hello,I am jian1573,I liking programing!; ch

4、ar character=m ; /指定一个字符 char *strtemp; strtemp=strchr(str,character);/注意这里返回的指针 if(strtemp!=NULL)/说明已经找了 printf(“%d ”,strtemp - str);/这里c位置的指针减去字符串str的指针就是当前的位置了,str表示表示字符串str的第一个字符的地址 else printf(can not find %c !,strtemp); return 0;,C字符串处理函数strchr/strstr,strstr与strchr差不多; 在字符串中查找指定字符串的第一次出现 char

5、*strstr(char *str1, char *str2); 找找子串”aa”在哪里? int main() char a81=aabbccaabbccabab, *p; p = strstr(a,“aa”);/返回的是指针 while (p!=NULL) int pos = p-a; printf(%dn,pos); p = strstr(a+pos+2,aa);/2为aa长度 return 0; ,C字符串处理函数strtok,原型:extern char *strtok(char *s, char *delim); 功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符

6、字符串。 说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。 strtok在s中查找包含在delim中的字符并用NULL(0)来替换,直到找遍整个字符串。 返回指向下一个标记串。当没有标记串时则返回空字符NULL。 事例 int main() char a=This is a sentence with 7 tokens; char *p=strtok(a, ); while(p!=NULL) puts(p);/被分割的串 p=strtok(NULL, ); puts(a);/注意,源字符串已经被修改 return 0; ,C字符串处理函数sprintf/sscanf,s

7、scanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数头文件 stdio.h 原型int sscanf( const char *buffer, const char *format, . );int sprintf( char *buffer, const char *format, . ); 功能:类似于scanf和printf 但从字符串*buffer用于输入输出,C字符串处理函数sprintf/sscanf,sprintf用于格式化字符串把变量打印到字符串中,从而获得数字的字符形式,这样不需要手工转换。例如char c100;int

8、k=255;sprintf(c,%d,k);/c包含255“ sprintf用于进制转换可以方便地得到变量的十六进制和八进制字符序列,再稍加处理即可得到每一位的值。char c100;int k=255;sprintf(c,%x,k);/c包含ff c0=f c1=f sprintf用于连接字符串方便地连接两个或者多个字符串char buf1024;char a100=I ;char b100=love ;char c100=ACM.sprintf(buf,%s%s%s,a,b,c);/buf 包含I love ACM.,C字符串处理函数sprintf/sscanf,sscanf用于处理输入有

9、些比较麻烦的输入输出用sscanf处理将会非常方便如hrbeu1002 (这里给出的不是完整代码,其中输出部分只是简单地原样打印出来。)因为scanf在使用除了%c以外的格式时都忽略换行符n,题中用空行来区分不同case的要求显得难以处理,如果使用sscanf的话,可以先把输入用scanf存入一块缓冲区当中,再用sscanf读取这样大大减少了工作量。#include int T100;int P100;int i;bool Input()int p=0;char buf1024;i=0;while(scanf(%c,C字符串处理函数sprintf/sscanf,sscanf用于分析字符串ssc

10、anf可以支持格式字符% 这为分析字符串提供了很大方便(其实scanf也支持%)先看一下% 格式:(1)-: 表示范围,如:%1-9表示只读取1-9这几个数字 %a-z表示只读取a-z小写字母,类似地 %A-Z只读取大写字母(2): 表示不取,如:%1表示读取除1以外的所有字符 %/表示除/以外的所有字符(3),: 范围可以用,相连接 如%1-9,a-z表示同时取1-9数字和a-z小写字母 (4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成% 的一个特例 % (注意后面有一个空格!)这样使用sscanf+%可以轻松的分析字符串,很多字符串问题便迎刃而解了

11、。以hrbeu3001为例(不是完整代码,没有要求的格式)只需2个sscanf函数,就能完成题目的要求,代码非常简洁。#include #include int main(int argc, char *argv)char buf1024,str1100,str2100,str3100,str4100,temp100=;int count;scanf(%d, ,C+字符串处理函数,string类用起来更方便,功能更加强大。 头文件 #include 用到命名空间using namespace std; 构造string对象和初始化: string str;/调用缺省的构造函数,建立空串 str

12、ing str1 = “Hello, world!”/初始化 string str2(OK); /调用采用C字符串初始化的构造函数 string str(str1); /调用拷贝构造函数,str是str1的拷贝,C+字符串处理函数,string类的输入输出 cinstr;/以空白字符结束 getline(cin, str);/回车结束,获取整行 coutstr;/输出字符串 string类用起来更方便,但要估计程序数据的规模,因为直接使用对string输入输出需要cin和cout,可能会超时。,C+字符串处理函数,求字符串长度 length(); size(); 判断是否为空串 empty()

13、; 返回的值是bool类型的 求子串 substr();,C+字符串处理函数substr,Substr(start, length); substr 方法 返回一个从指定位置开始,并具有指定长度的子字符串。 参数 start 必选。所需的子字符串的起始位置。字符串中第一个字符的索引为 0。 length 可选项。返回的子字符串中包含的字符数。 备注 如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾。 int main () string s=hello, world!; string ss1 = s.substr(2); string

14、ss2 = s.substr(2,3); coutss1endlss2endl; ,C+字符串处理函数erase,string ,C+字符串处理函数insert,int main () string s=,; s.insert(0,“heo”); coutsendl;/插入整个字符串 s.insert(4,“world”,2); coutsendl;/在第四个位置插入“world”的前2个字符 s.insert(2,2,l);coutsendl;/在第2个位置插入两个l字符 s.insert(s.end(),r);coutsendl;/使用迭代器在最后插入一个字符r s += ld!;cout

15、sendl;/在开头或者末尾插入最好还是运算符 ,C+字符串处理函数replace,int main () string s=hello, world!; /删除第7个字符后的6个字符,以“crq”代替 s.replace(7,6,crq); coutsendl; /删除第7个字符后3个字符,以caterchen前6个字符代替 s.replace(7,3,carterchen,6); coutsendl; /删除第7个字符后的6个字符,以3个z字符代替 s.replace(7,6,3,z); coutsendl; 更多。,C+字符串处理函数find,找字串 find:从前往后找 rfind:从

16、后往前找 找第一个出现在某个字符串中的字符 find_first_of find_first_not_of find_last_of find_last_not_of,C+字符串处理函数find,int find(char c, int pos = 0) const;/从pos开始查找字符c在当前字符串的位置 int find(const char *s, int pos = 0) const;/从pos开始查找字符串s在当前串中的位置 int find(const char *s, int pos, int n) const;/从pos开始查找字符串s中前n个字符在当前串中的位置 int find(const string /从pos开始查找字符串s在当前串中的位置 /查找成功时返回所在位置,失败返回string:npos的值,C+字符串处理函数find,int rfind(char c,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号