今天碰到了一个字符串截取的功能实现问题,比较常见所以就做下记录。
一般的实现是这样的:
#include
#include
int main(void){ char dest[5]={0}; char src[]="abcdefghijk"; strncpy(dest,src,4);//注意一下这里假如改为5的话,可能会出现 //内存越界使得dest可能会占用其它模块的内存,从而导致错误发生; //strncpy(dest,src+5,4);//从第5个字符开始截取; printf("dest: %s\n",dest); return 0; }
引申一下从左边开始截取n个字符:
static char* left(char *dest,const char *src ,int n){ char *p=dest; char *q=src; int len=strlen(src); if(n>len){ n=len; } while(n--) *(p++)=*(q++); *(p++)='\0'; return dest; }
从右边开始截取n个字符:
static char* light(char *dest,const char *src ,int n){ char *p=dest; char *q=src; int len=strlen(src); if(n>len){ n=len; } //int start=len-n; //q=q+start; q+=len-n; while(n--) *(p++)=*(q++); *(p++)='\0'; return dest; }
从中间某处截取一定长度的的子字符串:
static char* cut_substr(char *dest,const char *src ,char start,int n){ char *p=dest; char *q=src; chsr *temp=NULL; int len=strlen(src); if(start>=len || start<0){ return NULL; } temp=q+start; if(n>strlen(temp)){//注意这里,截取长度如果超过了src剩余的长度则只截取到src的最后,以避免内存越界; n=strlen(temp); } q+=start; while(n--) *(p++)=*(q++); *(p++)='\0'; return dest; }
以上方法基本上用指针来实现,但平时可以使用库函数来实现字符串的操作;
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204823.html原文链接:https://javaforall.net
