实现字符串函数

本文深入探讨了C语言中常见的字符串操作函数,包括strcpy、strcat、strstr、strchr、strcmp和memcpy的实现原理及使用方法。通过详细的代码示例,帮助读者理解如何在实际编程中正确使用这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.实现strcpy

//复制
char* Strcpy(char* dest,const char* src) {
	 assert(src != NULL);
	 int i = 0;
	 for ( i = 0; src[i]!='\0' ; i++) {
		dest[i] = src[i];
	 }
	 dest[i] = '\0';
	 return dest;
}

实现strcat

//连接
char* Strcat(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	int i = 0;
	for (; dest[i] != '\0'; i++);
	for (int j=0; src[j] != '\0'; j++,i++) {
		dest[i] = src[j];
	}
	dest[i] = '\0';
	return dest;
}

实现strstr

//寻找相同的字符序列并返回 
char* Strstr(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	
	char* i = dest;    
	char* j = src;
	while (*i != '\0') {
		char* k = i;           //用来判断相等
		while (*k != '\0'&&*j != '\0'&& *k == *j) {
			++j;
			++k;
		}
		if (*j == '\0') {       //找到了
			return i;
		}
		++i;
	}
	return NULL;
}

实现strchr

//返回第一个与所给字符相同的字符下标
char* Strchr(const char* dest,char s) {
	assert(dest != NULL);
	char* p = dest;
	for (; *p != '\0'; p++) {
        if (*p==s) {
			break;
		}
	}	
	return p;

}

实现strcmp

//比较字符串大小
int Strcmp(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	int i = 0;
	for (; dest[i] != '\0'&&src[i] != '\0'; i++) {
		if (dest[i] < src[i]) {
			return -1;
		}else if (dest[i] > src[i]) {
			return 1;
		}else {

		}
	}      //比较结束
	if (dest[i] < src[i]) {
		return -1;
	}
	else if (dest[i] > src[i]) {
		return 1;
	}
	else {
		return 0;
	}
}

实现memcpy

//内存拷贝,num表示拷贝的字节大小
void* Memcpy(void* dest,const void* src,size_t num) {
	char* pdest = (char*)dest;
	const char* psrc = (const char*)src;
	for (size_t i = 0; i < num; i++) {
		pdest[i] = psrc[i];
	}
	return dest;
}

以下主函数测试未初始化字符串,函数参数未修改

void main() {
	char dest[1024] = " ";   //此处数组内容未给出,如需测试请自行给出
	char src[1024] = " ";
	
	Strcpy(dest, src);
	printf("%s\n", dest);
	
	Strcat(dest, src);
	printf("%s\n", dest);
	

	char* ret = strstr(dest, src);
	printf("%p\n", dest);
	printf("%p\n", ret);
    

	char* ret=strchr(dest, 'a');
	printf("%d\n", ret - dest + 1);


	int tmp=Strcmp(dest, src);
	if (tmp == 0) {
		printf("dest=src\n");
	}
	else if (tmp >0) {
		printf("dest>src\n");
	}
	else if (tmp <0) {
		printf("dest<src\n");
	}
	

	Memcpy(dest,src,3);
	printf("%s\n",dest);
	
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值