编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下:
int substr(char dst[], char src[],intstart, int len) {}
目标:
从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NUL字符到dst数组。在复制完毕之后,dst数组必须以NUL字节结尾。函数的返回值是存储于dst数组中的字符串的长度。
注意:
函数的声明与调用;
空字符即为 \0;
#include <stdio.h>
int substr(char dst[], char src[],int start, int len)
{int i;for(i=0;i<len;i++){dst[i]=src[start+i]; //从第start+i个元素开始向数组内赋值}dst[i]='\0';return i;
}
int main()
{char dst[10]; //定义实参char src[]="abcdef";int m;m=substr(dst,src,2,4); //函数调用printf("%s\n",dst);printf("%d",m);return 0;
}
上面的程序有一个问题就是如果给定赋值的个数超出了整个长度,虽然字符串输出是正确的,但是输出的字符串的个数却超了。所以我们给它加上一个判断来看所给的值是否超过了本身剩下的字符串的长度;
#include <stdio.h>
int substr(char dst[], char src[],int start, int len)
{char *ps = src + start; int n = strlen(ps); //定义一个指针来求字符串长度int i = 0;if(n<len){len = n;}while(len--){dst[i]= ps[i];i++;}dst[i] = '\0';
}
int main()
{char dst[] = "abcdefghi";char src[] = "bit-tech";substr(dst,src,2,7);printf("%s\n",dst);return 0;
}