c 语言中的字符串操作

2016-12-14 09:53:00来源:http://blog.csdn.net/yhmhappy2006/article/details/1389027作者:yhmhappy2006人点击

第七城市

本章集中讨论字符串操作,包括拷贝字符串,拷贝字符串的一部分,比较字符串,字符串右对齐,删去字符串前后的空格,转换字符串,等等。C语言提供了许多用来处理字符串的标准库函数,本章将介绍其中的一部分函数。


在编写C程序时,经常要用到处理字符串的技巧,本章提供的例子将帮助你快速学会一些常用函数的使用方法,其中的许多例子还能有效地帮助你节省编写程序的时间。



61 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用?



strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(/0)时,它会删去该字符,并结束拷贝。


memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以你要为memcpy()函数指定要拷贝的字节数。


在拷贝字符串时,通常都使用strcpy()函数;在拷贝其它数据(例如结构)时,通常都使用memcpy()函数。


以下是一个使用strcpy()函数和memcpy()函数的例子:



#include<stdio.h>#include<string.h>typedefstructcust-str...{intid;charlast_name[20];charfirst_name[l5];}CUSTREC;voidmain(void);voidmain(void)...{char*src_string="Thisisthesourcestring";chardest_string[50];CUSTRECsrc_cust;CUSTRECdest_cust;printf("Hello!I'mgoingtocopysrc_stringintodest_string! ");/*Copysrc_stringintodest-string.Noticethatthedestinationstringisthefirstargument.Noticealsothatthestrcpy()functionreturnsapointertothedestinationstring.*/printf("Done!dest_stringis:%s ",strcpy(dest_string,src_string));printf("Encore!Let'scopyoneCUSTRECtoanother. ");prinft("I'llcopysrc_custintodest_cust. ");/*First,intializethesrc_custdatamembers.*/src_cust.id=1;strcpy(src_cust.last_name,"Strahan");strcpy(src_cust.first_name,"Troy");/*Now,Usethememcpy()functiontocopythesrc-custstructuretothedest_custstructure.Noticethat,justaswithstrcpy(),thedestinationcomesfirst.*/memcpy(&dest_cust,&src_cust,sizeof(CUSTREC));printf("Done!Ijustcopiedcustomernumber#%d(%s%s).",dest_cust.id,dest_cust.first_name,dest_cust.last_name);}


6. 2怎样删去字符串尾部的空格?



C语言没有提供可删去字符串尾部空格的标准库函数,但是,编写这样的一个函数是很方便的。请看下例:



#include<stdio.h>#include<string.h>voidmain(void);char*rtrim(char*);voidmain(void)...{char*trail_str="Thisstringhastrailingspacesinit";/*Showthestatusofthestringbeforecallingthertrim()function.*/printf("Beforecallingrtrim(),trail_stris'%s' i",trail_str);print("andhasalengthof%d. ",strlen(trail_str));/*CallthertrimOfunctiontoremovethetrailingblanks.*/rtrim(trail_str);/*Showthestatusofthestringaftercallingthertrim()function.*/printf("Aftercallingrttim(),trail_stris'%s' ",trail_str);printf("andhasalengthof%d. ",strlen(trail-str));}/*Thertrim()functionremovestrailingspacesfromastring.*/.char*rtrim(char*str)...{intn=strlen(str)-1;/*StartatthecharacterBEFOREthenullcharacter(0).*/while(n>0)/*Makesurewedon'tgooutofhounds...*/...{if(*(str+n)1='')/*Ifwefindanonspacecharacter:*/...{*(str+n+1)='';/*Putthenullcharacteratonecharacterpastourcurrentposition.*/break;/*Breakoutoftheloop.*/}else/*Otherwise,keepmovingbackwardinthestring.*/.n--;}returnstr;/**//*Returnapointertothestring*/}
在上例中,rtrim()是用户编写的一个函数,它可以删去字符串尾部的空格。函数rtrim()从字符串中位于null字符前的那个字符开始往回检查每个字符,当遇到第一个不是空格的字符时,就将该字符后面的字符替换为null字符。因为在C语言中null字符是字符串的结束标志,所以函数rtrim()的作用实际上就是删去字符串尾部的所有空格。


6.3 怎样删去字符串头部的空格?



C语言没有提供可删去字符串头部空格的标准库函数,但是,编写这样的一个函数是很方便的。请看下例;



#include<stdio.h>#include<string.h>voidmain(void);char*ltrim(char*);char*rtrim(char*);voidmain(void)...{char*lead_str="Thisstringhasleadingspacesinit.";,/*ShowthestatusofthestringbeforecallingtheItrim()function.*/printf("BeforecallingItrim(),lead-stris'%s' ",lead_str);printf("andhasalengthof%d. ",strlen(lead_str));/*CalltheItrim()functiontoremovetheleadingblanks.*/.Itrim(lead_str);/*ShowthestatusofthestringaftercallingtheItrim()function.*/prinft("AftercallingItrim(),lead_stris'%s' ",lead_str);print("andhasalengthof%d. '',strlen(lead-str));}/*TheItrim()functionremovesleadingspacesfromastring.*/char*ltrim(char*str)...{strrev(str);/*CallstrrevOtoreversethestring.*/rtrim(str))./**//*CallrtrimOtoremvoethe"trailing"spaces.*/strrev(str);/*Restorethestring'soriginalorder.*/returnstr;/*Returnapointertothestring.*/.}/*Thertrim()functionremovestrailingspacesfromastring.*/char*rtrim(char*str){intn=strlen(str)-l;/*StartatthecharacterBEFOREthenullcharacter(

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台