欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每日一练

程序员文章站 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;
}