资源描述
1-1融智技术学院融智技术学院第13章 字符串处理函数杨章伟杨章伟e-mail:第第1页页1-2融智技术学院融智技术学院课程内容安排课程内容安排输入输出函数输入输出函数 复制和拼接函数复制和拼接函数 比较和转换函数比较和转换函数 小结小结 习题习题 第第2页页1-3融智技术学院融智技术学院输入输出函数输入输出函数 输入输出操作使用十分频繁,输入输出操作使用十分频繁,C语言标准库为字符和字语言标准库为字符和字符串分别专门定义了几组输入输出函数。其中包含:符串分别专门定义了几组输入输出函数。其中包含:putchar函数和函数和getchar函数,它们提供了字符输入和输函数,它们提供了字符输入和输出操作;出操作;puts函数和函数和gets函数,它们提供了字符串输入函数,它们提供了字符串输入和输出操作。和输出操作。字符输入输出函数字符输入输出函数 字符串输入输出函数字符串输入输出函数 第第3页页1-4融智技术学院融智技术学院复制和拼接函数复制和拼接函数 字符串复制和拼接也是应用频繁操作。字符串复制和拼接也是应用频繁操作。C语言标准库提供了语言标准库提供了strcpy函数和函数和strncpy函数来实现字符串复制功效,并提供了函数来实现字符串复制功效,并提供了strcat函数和函数和strncat函数来实现字符串拼接功效。函数来实现字符串拼接功效。第第4页页1-5融智技术学院融智技术学院字符串复制函数字符串复制函数 C语言为字符串复制操作也定义了一个语言为字符串复制操作也定义了一个strcpy函数。使用形函数。使用形式以下:式以下:strcpy(str1,str2);其中,其中,str1和和str2为字符串。执行该语句后,为字符串。执行该语句后,strncpy函数函数会将字符串会将字符串str2复制到字符串复制到字符串str1中。中。strcpy函数不是一个安全函数。因为该函数会为一个字符函数不是一个安全函数。因为该函数会为一个字符数组数组str1赋值,所以,该值不能超出赋值,所以,该值不能超出str1有效内存空间,假有效内存空间,假如超出了将会覆盖外部内存空间,从而可能造成不可预测如超出了将会覆盖外部内存空间,从而可能造成不可预测问题。所以,使用该函数时,必须注意两个字符串字长。问题。所以,使用该函数时,必须注意两个字符串字长。【范例范例13-3】演示演示strcpy函数使用和缺点函数使用和缺点 第第5页页1-6融智技术学院融智技术学院字符串拼接函数字符串拼接函数 strcat函数和函数和strncat函数提供了字符串拼接功效。函数提供了字符串拼接功效。strcat函数申明以下:函数申明以下:char*strcat(char*str1,char*str2);其功效为将其功效为将str2有效字符拼接到有效字符拼接到str1有效字符后面,所以,有效字符后面,所以,str1空间要足够存放空间要足够存放str1和和str2全部有效字符。全部有效字符。strncat函函数申明以下:数申明以下:char*strncat(char*str1,char*str2,int n);其功效为将其功效为将str2前前n个字符复制到个字符复制到str1后面,此时,要求后面,此时,要求str1剩下空间要足够剩下空间要足够n个字符。个字符。strcat函数能够转换为函数能够转换为strncat函数来调用。比如,以下两个函数调用是等效:函数来调用。比如,以下两个函数调用是等效:strcat(st1,str2);strncat(str1,str2,length(str2);第第6页页1-7融智技术学院融智技术学院字符串比较函数字符串比较函数 strncmp函数是函数是C语言中用于比较字符串函数。在语言中用于比较字符串函数。在C语言中,字符语言中,字符串之间比较不能使用关系操作符直接进行。使用以下方式比较字串之间比较不能使用关系操作符直接进行。使用以下方式比较字符串做法是错误:符串做法是错误:str1 str2因为字符数组名因为字符数组名str1和和str2代表数值为字符串首地址,所以,该语代表数值为字符串首地址,所以,该语句作用是两个字符串首地址比较,而不是字符串内容比较。句作用是两个字符串首地址比较,而不是字符串内容比较。C语语言中为比较两个字符串大小提供了言中为比较两个字符串大小提供了strncmp函数。其使用形式以函数。其使用形式以下:下:strncmp(str1,str2,n);其中,其中,str1和和str2都为字符串,都为字符串,n为整数。执行该语句后,为整数。执行该语句后,strncmp函数会比较字符串函数会比较字符串str1和字符串和字符串str2前前n个字符。个字符。【范例范例13-6】使用使用strncmp函数比较字符串函数比较字符串 第第7页页1-8融智技术学院融智技术学院字符串转换函数字符串转换函数 用来对字符串进行大小写转换函数:用来对字符串进行大小写转换函数:strupr函数和函数和strlwr函数。其中,函数。其中,strupr函数将字符串中全部小写字母换成大函数将字符串中全部小写字母换成大写字母,写字母,strlwr函数将字符串中全部大写字母换成小写字函数将字符串中全部大写字母换成小写字母。其使用方式以下:母。其使用方式以下:strupr(str1);strlwr(str2);第第1行语句执行后,字符串行语句执行后,字符串str1中全部小写字母都会被转中全部小写字母都会被转化为大写字母,其余内容均不变。第化为大写字母,其余内容均不变。第2行语句执行后,字行语句执行后,字符串符串str2中全部大写字母都会被转换为小写字母,其余内中全部大写字母都会被转换为小写字母,其余内容均不变。这两个函数操作结果都保留在原字符数组上,容均不变。这两个函数操作结果都保留在原字符数组上,两个函数返回值都是字符数组首地址。两个函数返回值都是字符数组首地址。【范例范例13-7】strupr函数和函数和strlwr函数使用函数使用 第第8页页1-9融智技术学院融智技术学院小结小结 本章学习了字符数组和字符串使用,同时介绍了几个惯用字符串本章学习了字符数组和字符串使用,同时介绍了几个惯用字符串处理函数,为字符串操作提供了极大便利。在本章学习中,需要处理函数,为字符串操作提供了极大便利。在本章学习中,需要注意以下问题:注意以下问题:0就是值为就是值为0ASCII码,这是没有内容码字,其在字符串中作用是码,这是没有内容码字,其在字符串中作用是用做字符串终止符。用做字符串终止符。字符串必须包含字符串必须包含0,其最终一个字符必定是,其最终一个字符必定是0;而字符数组能够;而字符数组能够不要不要0。EOF为文件结束符,为一个系统变量,其值为为文件结束符,为一个系统变量,其值为-1。使用使用putchar函数、函数、getchar函数、函数、puts函数和函数和gets函数需要包含函数需要包含stdio.h头文件。头文件。使用使用strlen函数、函数、strncmp函数、函数、strncpy函数、函数、strupr函数和函数和strlwr函数需要包含函数需要包含string.h头文件。头文件。gets函数和函数和strncpy函数是一个不安全函数,使用时要确保在被赋函数是一个不安全函数,使用时要确保在被赋值字符数组正当范围内操作。值字符数组正当范围内操作。第第9页页1-10融智技术学院融智技术学院1【考题考题】寻找热门查询:搜索引擎会经过日志文件把用户每寻找热门查询:搜索引擎会经过日志文件把用户每次检索使用全部检索串都统计下来,每个查询串长度为次检索使用全部检索串都统计下来,每个查询串长度为1-255字节。假设当前有一千万个统计,这些查询串重复度比较高,字节。假设当前有一千万个统计,这些查询串重复度比较高,即使总数是即使总数是1千万,但假如除去重复后,不超出千万,但假如除去重复后,不超出3百万个。一百万个。一个查询串重复度越高,说明查询它用户越多,也就是越热门。个查询串重复度越高,说明查询它用户越多,也就是越热门。请统计最热门请统计最热门10个查询串,要求使用内存不能超出个查询串,要求使用内存不能超出1G。请给。请给出主要处理流程。出主要处理流程。【解析解析】该问题用哈希算法实现,首先逐次读入查询串,算哈希该问题用哈希算法实现,首先逐次读入查询串,算哈希值,保留在内存数组中,同时统计频度(注意值与日志项对值,保留在内存数组中,同时统计频度(注意值与日志项对应关系)选出前十频度,取出对应日志串,其中哈希表设计应关系)选出前十频度,取出对应日志串,其中哈希表设计是关键。是关键。常见面试题常见面试题 第第10页页1-11融智技术学院融智技术学院2【考题考题】集合合并:给定一个字符串集合,格式如:集合合并:给定一个字符串集合,格式如:aaa bbb ccc,bbb ddd,eee fff,ggg,ddd hhh要求将其中交集不为空集合合并,要求合并完成后要求将其中交集不为空集合合并,要求合并完成后集合之间无交集,比如上例应输出集合之间无交集,比如上例应输出aaa bbb ccc ddd hhh,eee fff,ggg(1)请描述处理这个问题思)请描述处理这个问题思绪和处理流程。绪和处理流程。【解析解析】(1)思绪:先将集合按照大小排列后)思绪:先将集合按照大小排列后,优先考优先考虑小集合是否与大集合有交集。有就合并,假如小集合虑小集合是否与大集合有交集。有就合并,假如小集合与全部其它集合都没有交集则独立。独立集合在下一轮与全部其它集合都没有交集则独立。独立集合在下一轮比较中不用考虑。这么就能够尽可能降低字符串比较次比较中不用考虑。这么就能够尽可能降低字符串比较次数。当全部集合都独立时候,就终止。数。当全部集合都独立时候,就终止。常见面试题常见面试题第第11页页1-12融智技术学院融智技术学院1请使用请使用getchar函数实现一个函数,要求其功效与函数实现一个函数,要求其功效与gets函数一致。该函数申明以下:函数一致。该函数申明以下:char*my_gets(char*);【提醒提醒】使用使用getchar函数一个一个地读取字符,保留到函数一个一个地读取字符,保留到字符串中,直至碰到空白符。字符串中,直至碰到空白符。2请使用请使用putchar函数实现一个函数,要求其功效与函数实现一个函数,要求其功效与puts函数一致。该函数申明以下:函数一致。该函数申明以下:void my_puts(char*);【提醒提醒】使用使用putchar函数一个一个打印字串中字符,直函数一个一个打印字串中字符,直至碰到至碰到0。综合练习综合练习 第第12页页
展开阅读全文