每日一练
程序员文章站
2022-07-07 08:26:30
...
请编写一个函数,它从一个字符串中提取一个子字符串。函数的原型如下:
int substr(char dst[], char src[], int start, int len);
函数的任务是从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NUL字符到dst数组。在复制完毕后,dst数组必须以NUL字节结尾。函数的返回值是存储于dst数组中的字符串的长度。
如果start所指定的位置越过了src数组的尾部,或者start或len的值为负,那么复制到dst数组的是个空字符串。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
//请编写一个函数,它从一个字符串中提取一个子字符串。
//函数的原型如下:
//int substr(char dst[], char src[], int start, int len);
//函数的任务是从src数组起始位置向后偏移start个字符的位置开始,
//最多复制len个非NUL字符到dst数组。
//在复制完毕后,dst数组必须以NUL字节结尾。
//函数的返回值是存储于dst数组中的字符串的长度。
//如果start所指定的位置越过了src数组的尾部,或者start或len的值为负,
//那么复制到dst数组的是个空字符串。
int substr(char dst[], const char src[], int start, int len){
assert(dst != NULL);
assert(src != NULL);
int i = 0;
if (start > strlen(src) || start < 0 || len < 0) {
dst[i] = '\0'; // 返回一个空串
}
else {
while (len--) { // 复制len个字符
dst[len] = src[start + len];
i++;
}
dst[i] = '\0';
}
return strlen(dst);
}
int main() {
char arr[1024] = "aabbccddeeffgghhiijjkkllmm";
char ret[1024];
substr(ret, arr, 26, 10);
printf("%s\n", ret);
system("pause");
return 0;
}