字符串2函数.docx
- 文档编号:6776974
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:4
- 大小:19.36KB
字符串2函数.docx
《字符串2函数.docx》由会员分享,可在线阅读,更多相关《字符串2函数.docx(4页珍藏版)》请在冰豆网上搜索。
字符串2函数
字符串的应用===================================
1.求字符串长度
/*strlen();原型:
unsignedintstrlen(char*s);头文件:
string.h格式:
strlen(字符数组名)功能:
计算字符串s的(unsignedint型)长度,不包括'\0'在内(有效长度)说明:
返回s的长度,不包括结束符'\0'.注:
从传入的地址开始统计字符个数直到遇到'\0'结束统计且统计结果不包括'\0';*/#import
='\0';i++){count++;}returncount;}//while循环+指针的方式unsignedlongmyStrlen2(constchar*s);unsignedlongmyStrlen2(constchar*s){unsignedlongcount=0;//第一种while循环//while(*s!
='\0'){//count++;//统计//s++;//指针后移,循环继续直到字符'\0'结束//}//第二种while循环while(*s++){count++;}returncount;}intmain(intargc,constchar*argv[]){printf("字符长度为:
%ld\n",myStrlen("wuchen"));//for循环调用函数printf("字符长度为:
%ld\n",myStrlen2("wuchen"));//while循环调用函数return0;}
============================================
2.Atoi函数
/*原型:
intatoi(constchar*s);功能:
把字符转换为长整型数说明:
atoi将第一个字符串转换为一个整数,从最前面开始,如果有空格,则跳过空格,直到第一个非空字符,开始转换如果第一个字符是"+或"-"则会转换为正/负数(正号不输出,符号输出);如果数字字符串中间有字母,则整个字符串只转换为字母前面的数字字符串,并结束转换*/#import
='0';i++){if(s[i]>='0'&&s[i]<='9'){tmp=s[i]-'0';//将字符串转化为数字sum=sum*10+tmp;//累加求和}else{break;//遇到非数字字符则停止转化}}returnsum*flag;//和带上正负号}intmyAtoi2(constchar*s);intmyAtoi2(constchar*s){//先判断字符串前面是否有空格如果有则跳过while(*s==''){//*s表示的是指针的值s表示的是指针s++;}intflag=1;//1表示正数//判断第一个字符是‘+’或‘-’if((*s=='+')||(*s=='-')){if(*s=='+'){flag=1;//表示正数}else{flag=-1;//表示负数}s++;}//转化过程inttmp;intsum=0;while(*s!
='\0'){if((*s>='0')&&(*s<='9')){//如果字符是0~9之间的数则转化tmp=*s-'0';//将字符串转化为数字字符sum=sum*10+tmp;//累和s++;//指针加加后移}else{break;//如果是非数字字符则停止转换此时sum还是初始值0}}returnsum*flag;}intmain(void){printf("==============myAtoi============\n");printf("%d\n",myAtoi("+123"));//123printf("%d\n",myAtoi("-123"));//-123printf("%d\n",myAtoi("123"));//123printf("%d\n",myAtoi("123"));//123printf("%d\n",myAtoi("+-123"));//0printf("%d\n",myAtoi("+123-123"));//123printf("%d\n",myAtoi("+1230"));//123printf("%d\n",myAtoi("a123"));//0printf("%d\n",myAtoi("123a"));//123printf("%d\n",myAtoi("123a123"));//123printf("==============myAtoi2============\n");printf("%d\n",myAtoi2("+123"));//123printf("%d\n",myAtoi2("-123"));//-123printf("%d\n",myAtoi2("123"));//123printf("%d\n",myAtoi2("123"));//123printf("%d\n",myAtoi2("+-123"));//0printf("%d\n",myAtoi2("+123-123"));//123printf("%d\n",myAtoi2("+1230"));//123printf("%d\n",myAtoi2("a123"));//0printf("%d\n",myAtoi2("123a"));//123printf("%d\n",myAtoi2("123a123"));//123printf("=================================\n");}
============================================
3.字符串拷贝strcpy
/*strcpy原型:
char*strcpy(char*dest,constchar*src);头文件:
#include
把src地址开始且含有NULL结束符的字符串复制到dest开始的地址空间说明:
1.输入src和dest所指内存区域不可以重叠2.dest要保证有足够的空间来容纳src的字符串3.返回指向dest指针*/#import
='\0'){*dest=*src;dest++;src++;}#endif#if0//while((*dest++=*src++)!
='\0');////*dest='\0';//手动在拷贝后的目的字符串后添加一个'\0'作为结束符#endif//断言源字符串和目的字符串都不为空NULLassert((dest!
=NULL)&&(src!
=NULL));//assert断言char*address=dest;//新定义一个指针指向destwhile((*dest++=*src++)!
='\0'){}returnaddress;//引用返回地址实现链式操作//returnsave;}intmain(intargc,constchar*argv[]){charbuff[1024]={};printf("-----------myStrcpy---------------\n");printf("拷贝前的buff:
%s\n",buff);printf("%s\n",myStrcpy(buff,"dfgadvadsadfgdfegrgdfbdvdsvdd"));printf("%s\n",myStrcpy2(buff,"dfgadvadsadfgdfegrgdfbdvdsvdd"));printf("拷贝后的buff:
%s\n",buff);return0;}
============================================
4.字符串拼接strcat
/*#import
用for循环和数组:
char*myStrcat(char*dest,char*src);char*myStrcat(char*dest,char*src){inti;for(i=0;dest[i]!
='\0';i++);//以分号结尾它是一个完整地C语句intj;//拷贝--》把src的内容加到dest后面去for(j=0;src[j]!
='\0';j++){dest[i+j]=src[j];//将源字符串的字符渚个拷打目的字符串}dest[i+j]='\0';returndest;//返回到dest的首地址}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchen";char*ret=myStrcat(buff,"zhengcong");printf("%s\n",ret);return0;}*///方法二while循环+指针#include
='\0'dest++;}*///上述代码可以用以下实现dest=dest+strlen(dest);//dest的首地址+dest的有效长度while((*dest++=*src++));//循环拷贝将源字符串里面的内容拷贝到目的字符串里面去returnaddress;}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchenlove";char*ret=myStrcat(buff,"zhengcong");printf("%s\n",ret);return0;}
============================================
5.字符串比较函数strcmp
/*strcmp函数原型:
intstrcmp(constchar*s1,constchar*s2);头文件:
比较字符串s1和s2.一般形式:
strcmp(字符串1,字符串2)说明:
当s1
两个字符串自左向右逐个字符比较(按ASCII值大小比较),直到出现不同的字符或者遇到'\0'停止特别注意:
intstrcmp(constchar*s1,constchar*s2)';只里面只能比较字符串,不能比较数字等其它形式的参数;注:
strcmp函数实际上是对字符的ASCII码比较,实现原理如下:
首先比较两个字符串的第一个字符,如不相等,则停止比较,并得出两个ASCII大小比较结果;如果相等,就接着比较第二字符然后是第三字符等。
无论两个字符串怎么样,strcmp函数最多比较到其中一个字符串遇到结束符'\0'为止,就能得出结果!
*//*#import
intmyStrcmp(constchar*s1,constchar*s2);intmyStrcmp(constchar*s1,constchar*s2){inti,j;for(i=0;(s1[i]!
='0')&&(s2[i]!
='0');i++);for(j=0;j
=s2[j]){break;}}return(s1[j]-s2[j]);}intmain(intargc,constchar*argv[]){char*p="wuchen";char*q="zhengcong";printf("%d\n",myStrcmp(p,q));return0;}*//*#import
intmyStrcmp(constchar*s1,constchar*s2);intmyStrcmp(constchar*s1,constchar*s2){inti;for(i=0;s1[i]!
='\0'&&s2[i]!
='\0';i++){if(s1[i]==s2[i]){//如果相等,则继续比较continue;//继续循环}else{break;//如果不相等,则跳出循环}}return(s1[i]-s2[i]);}intmain(void){printf("----------myStrcmp-----------\n");char*p="hefei";charch[10]="beijing";printf("比较结果为:
%d\n",myStrcmp(p,ch));printf("----------myStrcmp-----------\n");}*///方法二while循环和指针:
#include
='\0'&&*s2!
='\0'){if(*s1!
=*s2){//如果相等则继续比较break;//如果不相等退出循环}s1++;//指针s1往后移s2++;//指针s2往后移}return(*s1-*s2);//如果不相等返回差值}intmain(void){printf("-----------myStrcmp2-----------\n");char*p="hefei";charch[10]="beijing";printf("比较结果为:
%d\n",myStrcmp2(p,ch));printf("-----------myStrcmp2-----------\n");return0;}
============================================
6.字符串查找
/*strstr原型:
char*strstr(constchar*s1,constchar*s2);s1:
被查找目标s2:
要查找的对象返回值:
strstr函数返回s2第一次在s1中的位置,如果没有找到就返回NULL注:
字符串查找,查找后面的子串在前面长串中的位置,找到之后,返回子串在长串中的位置(从前往后找第一个出现的位置)找不到子串那么就返回NULL(0);*//*#import
for循环和数组:
char*myStrstr(constchar*s1,constchar*s2);char*myStrstr(constchar*s1,constchar*s2){inti,j;if(strlen(s1) ='\0';i++){j=0;if(s1[i]==s2[j]){//当s2里面某个字符和s1里面某个字符相等的时候//判断子串到'\0'前的字符for(j=1;s2[j]! ='\0';j++){if(s1[i+j]==s2[j]){//如果s2里面的字符和s1里面某个字符的下个字符也相等的时候continue;//继续}else{break;//退出循环}}if(s2[j]=='\0'){//在循环里面s2[j]=='\0',说明s2已经到字符串末尾了break;//已经找到了退出}}}if(s1[i]=='\0'){//在循环里面returnNULL;//返回NULL空}else{return(char*)&s1[i];//返回s1的首地址}}intmain(intargc,constchar*argv[]){charbuff[1024]="woxihuanzhengcong";char*ret=myStrstr(buff,"xihuan");printf("%s\n",ret);return0;}*///while循环和指针//方法二while和指针的形式char*myStrstr2(constchar*s1,constchar*s2);char*myStrstr2(constchar*s1,constchar*s2){//排错处理if(strlen(s1) ='\0'constchar*tmp=s2;//新定义一个指针tmp指向s2if(*s1==*tmp){//如果tmp里面第一个元素和s1里面的某个元素相等inti=1;tmp++;//指针后移继续比对while(*tmp){//*tmp! ='\0'if(*(s1+i)==*tmp){//如果tmp后移的下一个元素和*(s1+i)的元素相等tmp++;//指针继续后移i++;//s1的元素也往后查找continue;//继续}else{break;//r如果不相等则退出}}if(*tmp=='\0'){//如果tmp查找到最后则退出break;}}s1++;//指针s1继续往后找下一个元素}//s1if(*s1! ='\0'){return(char*)s1;}elsereturnNULL;}intmain(intargc,constchar*argv[]){charbuff[1024]="wuchen";char*ret=myStrstr2(buff,"wkk");printf("%s\n",ret);printf("%s\n",myStrstr2(buff,"wu"));return0;} 2014年08月25日,今天学习了字符串函数的由来,从利用系统函数到自己封装的函数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 字符串 函数