您的位置:首页 > 编程语言 > C语言/C++

[置顶] C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)

2016-10-16 20:26 260 查看

C语言,从字符串中提取一个字符串,int substr(char dst[], char src[],int start,int len)

目标是:从src数组的起始位置开始向后偏移start个字符的位置开始, 最多复制len个非NUL字符到dst数组中,在复制完毕之后,dst 必须以NUL结尾,函数的返回值是存储于dst 数组的字符串的长度

方法一:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#include <stdlib.h>

#include<assert.h>

int strlen(char * string)

{

 int length;

 for(length=0;*string++!='\0';)

  length+=1;

 return length;

}

int substr(char dst[], char src[],int start,int len)

{

    char* sc = src+start;

    int n = strlen(sc);

    int i = 0;

 int **ret=NULL;

 assert(dst != NULL );

 assert(src != NULL );

    if(n < len)

    {

        len = n;

    }

    while(len)

    {

        dst[i] = sc[i];

        len--;

        i++;

    }

    dst[i] = '\0';

}

int main()

{

 char string[]="hello-my-college";

 char string1[100]={0};

 int ret=0;

 int num=0;

 int count=0;

 printf("please the len and the num is:\n");

 scanf("%d%d",&num,&count);

 ret=substr(string1,string,num,count);

 printf( "目的数组长度 : %d \n",count); 

    printf( "目的数组为: %s \n",string1); 

 system("pause");

 return 0;

}

方法二:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include<assert.h>

#include<math.h>

int strlen(char * string)

{

 int length;

 for(length=0;*string++!='\0';)

  length+=1;

 return length;

}

int substr( char dst[], char src[], int start, int len ) 



    char *temp = dst;

    int dst_len = 0; 

    int src_len = strlen(src);

 int i=0; 

 assert( dst != NULL && src != NULL );   

    if( start<0 || len<=0 || src_len < start ) 

        printf( "提取位置或字符个数不符合要求 !\n" ); 

 

    for( i=0; i<start; i++ ) 

         src++; 

 

    //while( (*temp++ = *src++) != '\0' && dst_len < len ) 

    while( dst_len < len && (*temp++ = *src++) != '\0' )   // 若把比较长度放在后面,就会多复制一个字符 

        dst_len++; 

    *temp = '\0'; 

     

    return dst_len; 



int main()

{

 char string[]="hello-my-college";

 char string1[100]={0};

 int ret=0;

 int num=0;

 int count=0;

 printf("please the len and the num is:\n");

 scanf("%d%d",&num,&count);

 ret=substr(string1,string,num,count);

 printf( "目的数组长度 : %d \n",count); 

    printf( "目的数组为: %s \n",string1); 

 system("pause");

 return 0;

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐