C语言--字符串的截取

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LIUTAOZHU1013/article/details/89110024

        今天碰到了一个字符串截取的功能实现问题,比较常见所以就做下记录。

一般的实现是这样的:

#include <stdio.h>
#include <string.h>

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;
} 

以上方法基本上用指针来实现,但平时可以使用库函数来实现字符串的操作;

展开阅读全文

没有更多推荐了,返回首页