




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
whats in string? c语言string类函数实现汇总 觉得都是学习使用指针的好例子(算是读书摘抄和笔记吧) 看到很多地方都面试或者考试都要涉及字符串的很多知识 有的需要自己写字符串 最近看书的收集了一些 算是摘抄 然后在其中加了点我自己的感受 嘿嘿strcpy 函数 ,作用是将一个字符串的字符复制到另一个字符串中char * strcpy(char *destination ,const char * source) while(*destination+=*source+);/看这一句话写的,精炼间断而又让人一目了然 /我用while写肯定是要三条语句,循环变量,赋值,递增,唉。这就是菜鸟啊 return(destination-1);strcat函数,作用是将一个串的内容追加到另一个串上char *strcat(char *target,const char * source) char *original=target; while(*target)/这里可以看出指针和数组下标的不同,一直都觉得指针式很有优势的 target+; while(*target+=*source+); return(original);/注意到与上面一个函数返回的不同 strncat函数,这个不常用,作用是给字符串追加了N个字符char *strcat(char *destination ,const char * source,int n) char *original=destination; int i=0; while(*destination ) destination +; while(i+n) *destination=NULL; return(original); strlwr 和 strupr函数 这两个函数实现起来比较简单,就不列了 :)str_index函数 作用是返回索引到串的首次出现int str_index(const char*string, char letter) char *original=string; while(*string!=letter)&(*string) string+; return(string-original);/这个返回方法,没有一定功力估计很难想出来,至少脑子里不会首先会想到这样写strrchr函数 也是不常用的函数 作用是搜索字符在字符串中的末次出现char *strrchr(const char *string, char letter) char *ptr=NULL; while(*string)/这个逻辑在很多地方都有用 if(*string=letter) ptr=string; string+; return (ptr);strchr函数 作用是获取字符串中第一次出现某个字符char *strchr(const char *string, char letter) while(*string!=letter)&(*string) string+; return (string);strr_index函数 作用是返回指向字符串末次出现的索引int strr_index(const char *string,char letter) char *original=string; char *ptr=NULL; while(*string) if(*string=letter) ptr=string; string+ return(*ptr)?ptr-original:string-original);/要么返回末次出现的索引,要么返回字符串的长度charcnt函数 作用是计算字符串中字符出现的次数int charcnt(const char *string,char letter) int count=0; while(*string) if(*string=letter) count+; return(count);strrev函数 作用是将字符串内容反转char *strrev(char *string) char *original=string; char *forward=string; char tmp; while(*string) string+; while(forward*s2)?-1:1);strncmp函数 作用是比较两个字符串的前N个字符 实现和上面的函数很类似 只是要添加一个控制变量控制下长度 : )strdup函数 作用是复制字符串的内容strdup(const char *s1) char *ptr; if(ptr=malloc(strlen(s1)+1) strcpy(ptr,s1); return(ptr);strspn函数 作用是从给定字符序列中查找字符的首次出现size_t strspn(const char *s1, const char *s2)/这个函数我看了很久才明白是什么意思,比如第一个参数传abcDef,第二个传cbA, /按照顺序查找第一个字符串,可以找到第一个没有在第二个字符串中出现的字符是D /返回这个字符在第一个字符串中的索引,也就是3,另外,为什么不用int而用size_t做 /返回值,是因为site_t是unsigned int,也就是正数 int i,j; for(i=0;*s1;i+,s1+) for(j=0; s2j; j+) if(*s1=s2j) break; if(s2j=NULL) break; return(i);strstr函数 作用是在字符串中查找子字符串 虽然返回值是char* 但是这个函数应该在判断有没有找到子字符串情况下用的多些char * strstr(const char *s1,const char *s2) int i,j,k; for(i=0; s1i; i+) for(j=i,k=0; s1j=s2k; j+,k+) if(!s2k+1) return(s1+i) return(NULL);strstr_cnt函数 作用是计算字符串出现的次数 实现差不多是strstr 和cnt的组合 : )substring_index函数 作用是给子字符串获取索引 只要将strstr的返回值改成i就可以了 : )r_strstr函数 作用是获取子字符串最右端出现 和strstr差不多 然后参照一般的查找最右端的函数 : )strstr_rem函数 作用是从字符串中删除子字符串char * strstr_rem(char *string, char *substring)/我没有仔细看这个函数,我有点懒,嘿嘿,但是按照上面的strstr在找到字符串后进行 /进行替换,具体过程没看 列出来 可以学习 int i,j,k,loc=-1; for(i=0; stringi&(loc=-1); i+) for(j=i,k=0; stringj=substringk; j+,k+) if(!substringk+1) loc=i; if(loc!=-1) for(k=0; substrk;k+); for(j=loc;i=loc+k,stringi; j+, i+) stringj=stringi; stringi=NULL; return(string)strstr_rep函数 作用是用另一个字符串代替子字符串char *strstr_rep(char *source, char *old , char *new) char *original=source; char temp256; int old_length=strlen(old); int i,j,k,location=-1; for(i=0; sourcei&(location=-1); i+) for(j=i,k=0; sourcej=old k; j+,k+) if(!old k+1) location=i; if(location!=-1) for(j=0;jlocation;j+) tempj=sourcej; for(i=0;newi;i+,j+) tempj=newi; for(k=location+old_length;sourcek;k+,j+) tempj=sourcek; tempj=NULL; for(i=0; sourcei=tempi;i+); return(original);C语言 指向字符串的指针2011-01-19 22:39:42|分类: 数据结构 |标签: |字号大中小订阅 定义字符串字符串数组 char arr=123;/ 或者是1,2,3 ; char str6= im, 28, year, old, my, dear, u ; /注意要指定高维数组的大小 其长度为该数组最长元素的字符个数+1用指针对二维数组的取值(要写到二维数组区域中)假设一个一维数组a 很显然一维数组取值是 *(a+i) i代表指针的偏移量 a表示的是该数组的首地址二维数组其实也就如同一维数组 只不过这个一维数组的元素是一个一维数组所以对于二维数组arr *(*(arr+i)+j) arr+i 是指向到arr中第i个元素*(arr+i) 就是指向到2维数组中某一个元素 该元素本身又是一个数组因此综合起来就是*(*(arr+i)+j)虽然二维数组可以理解为一维数组 但是不能通过 *p=arr 这样的方式去指向void testArr() int arr1=1,2,3; int *p=arr1; /这句话拆开应该是 int *p; p=arr1 最终p才是指针变量 int arr233=1,2,3,4,5,6; p=arr20; int (*pp)3=arr2; /虽然二维数组可以理解为一维数组 但是不能像上面那样定义一个指针指向它 /要像这样 定义一个指针数组指向2维数组 pp+; /如果把2维数组看做一个矩阵 这相当于移动到下一行 /指针原本指向 1,2,3 这个元素, 现在指向了4,5,6 printf(%d,*(*pp)+1 ); /输出5指向字符串的指针变量 char *str=sdsdsds; printf(%s, str );或者 char *str; str=sdsdsds; printf(%s, str );/ 注意赋给str的不是字符串 也不是字符 而是字符串的首地址但是如果换成这样就不行: char *str; *str=sdsdsds; printf(%s, str );字符串指针作为参数(数组复制)常见做法#include stdio.h void copy_str(char from, char dest ) int i=0; for (;fromi!=0;i+ ) desti=fromi; desti=0;void main() char from=sdsdsdfsf; char dest=dfdsdgfg; copy_str(from,dest); printf(%s,dest );使用指针作为参数#include stdio.h void copy_str(char *from, char *dest ) for (;*from!=0; from+,*dest+ ) *dest=*from; *dest=0; void main() char from=sdsdsdfsf; char dest=123; copy_str(from,dest); printf(%s,dest ); copy_str 中的for循环可以改写为 while (*dest=*from)!=0 ) from+; dest+; 或者进一步: while (*dest+=*from+)!=0 );指针的移动void main() char *a=i love rilakkuma; char *p=a+7; /移动指针 printf(%s,p ); printf(%c,a5);/虽然没有定义数组a 但由于字符串在内存中是以数组的形式存放的 /a5是按照*(a+5)来执行的 输出 rilakkumae指针数组#include stdio.h void testArr();char str5=Bill,Sam,Jim,Paul,0;/定义了一个数组 存放的数组类型是char指针型 /该指针指向一个字符串数组 也就是char型的2维数组char *Names= Bill, Sam, Jim, Paul, 0;void main() /Names 本身是一个指针数组 Names是数组名 那么代表的是Names数组第一个元素地址 / *Names 就是根据地址区出地址中的内容 /printf(%sn, *(&Names0); / 也就是说 *Names 和 *(&Names0) 一样 printf(%s,n, *Names ); / 输出Bill, 实际上Names指向的是一个2维数组 char *p=Names; /由于Names本身是一个指针数组 想要指向指针数组 应定义一个2级指针 while(*p!=0 ) printf(%sn,*p ); p+; *p=Names0; testArr();void testArr() int arr1=1,2,3; int *p=arr1; /这句话拆开应该是 int *p; p=arr1 最终p才是指针变量 int arr233=1,2,3,4,5,6; p=arr20; int (*pp)3=arr2; /虽然二维数组可以理解为一维数组 但是不能像上面那样定义一个指针指向它 /要像这样 定义一个指针数组指向2维数组 pp+; /如果把2维数组看做一个矩阵 这相当于移动到下一行 /指针原本指向 1,2,3 这个元素, 现在指向了4,5,6 printf(%d,*(*pp)+1 ); /输出5示例#include stdio.h void main() char arr=123;/ 或者是1,2,3 ; char str6= im, 28, year, old, my, dear, u ; /注意要指定高维数组的大小 其长度为该数组最长元素的字符个数+1 char *p=arr; printf(%cn,*p ); /输出地址 while(*p!=0 ) printf(%c,*p); p+; printf(n); char *name= sss,ddd,ggg ; /不能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届平顶山市重点中学九年级英语第一学期期末质量跟踪监视试题含解析
- 2026届辽宁省大连市高新园区化学九上期末监测模拟试题含解析
- 夜间文案工作总结与激励
- 王安石《南乡子自古帝王州》古诗鉴赏试题答案解析及译文
- 湖北省武汉东湖高新区2026届九年级英语第一学期期末达标测试试题含解析
- 银行安全保卫培训课件
- 预防接种沟通艺术
- 2026届江苏省南通市通州区金北学校九年级英语第一学期期末检测试题含解析
- 2026届陕西省汉中学市南郑区红庙镇初级中学九上化学期中复习检测模拟试题含解析
- 河北省石家庄市长安区第二十二中学2026届英语九上期末复习检测试题含解析
- 2025文具用品采购合同范本格式
- 电气检修生产安全培训课件
- 2025天津津南国有资本投资运营集团有限公司及实控子公司招聘工作人员招聘5人考试模拟试题及答案解析
- 营造清朗空间+课件-2025-2026学年(统编版2024)道德与法治八年级上册
- 2025年遴选财务岗考试题及答案
- 《2025新版检验检测机构管理评审报告》
- 移动与酒店合作合同协议
- excel操作考试题及答案
- 项目安全管理实施细则
- 车间偷盗行为管理办法
- 2025劳动教育考试试题及答案
评论
0/150
提交评论