string函数的实现

strcpy 函数的实现

#include<stdio.h>
#include <assert.h>
char* Strcpy(char* dest,const char* src) {
	int i;
	char* ret = dest;
	assert(src!= NULL);
	assert(dest!= NULL);
	for(i = 0;src[i]!='\0';i++) {
		dest[i] = src[i];
	}
	dest[i] = '\0';
	return ret;
}
int main() {
	char string1[1024];
	char string2[1024];
	gets(string1);
	Strcpy (string2,string1);
	puts(string2);
	return 0;
}

stcat 函数的实现

#include<stdio.h>
#include <assert.h>
char* Strcat(char* dest,const char* src) {
	int i;
	int k;
	char* ret = dest;
	assert(src!= NULL);
	assert(dest!= NULL);
	//for(i = 0,k = 0;dest[i]!='\0';i++,k++);
	//for(i = 0;src[i]!='\0';i++) {
	//	dest[k++] = src[i];
	//}
	//dest[k] = '\0';
	while(*dest){
		dest++;
	}
	while((*dest++ = *src++)){
		;
	}
	return ret;
}
int main() {
	char string1[1024];
	char string2[1024];
	gets(string1);
	gets(string2);
	Strcat (string2,string1);
	puts(string2);
	return 0;
}

strcmp函数

#include <string.h>
#include<stdio.h>
#include <assert.h>

int Strcmp(const char* str1,const char* str2) {
	assert(str1!=NULL);
	assert(str2!=NULL);
	while(*str1!='\0'&&*str2!='\0') {
		if(*str1==*str2){
			str1++;
			str2++;
			continue;
		}
		else if(*str1>*str2){
			return 1;
		}
		else if(*str1<*str2) {
			return -1;
		}
		str1++;
		str2++;
	}
	if((*str1)==(*str2)) {
		return 0;
	}
	if(*(str1+1)=='\0'&&*(str2+1)!='\0'){
		return 1;
	}
	else return -1;	
}
int main () {
	int result;
	char str1[1024];
	char str2[1024];
	gets(str1);
	gets(str2);
	printf("%d\n",result = Strcmp (str1,str2));
	return 0;
}

strstr函数

#include <string.h>
#include<stdio.h>
#include <assert.h>
char* Strstr(char * str1,const char * str2){
	char* black_ptr;
	char* red_ptr;
    const char* search_ptr;
    int i;
	assert(str1!=NULL);
	assert(str2!=NULL);
	black_ptr = str1;
	//遍历字符串
	for(i = 0;str1[i]!='\0';i++,black_ptr++) {
		//如果没有找到的话那么重置两个指针
		//回到初始位置
		red_ptr = black_ptr;
		search_ptr = str2;
		while(*red_ptr == *search_ptr
			&&*red_ptr!='\0'
			&&*search_ptr!='\0') {
			  
			red_ptr++;
			search_ptr++;
		}
		if(*search_ptr == '\0') {
			return black_ptr;
		}
		else continue;
	}
	return NULL;
}
int main () {
	char str1[1024];
	char str2[1024];
	char* pch;
	gets(str1);
	gets(str2);
	pch = Strstr(str1,str2);
    puts(pch);
	return 0;
}

strchr

#include <string.h>
#include<stdio.h>
#include <assert.h>

const char* Strchr(const char* str,int character) {
	assert(str!=NULL);
	while(*str++) {
		if(character==*str) {
			return str;
		}
	}
	return NULL;
}
int main () {
	const char* search_char;
	char str[1024];
	char character;
	gets(str);
	/*scanf("%d",&character);*/
	character = getchar();
	search_char = Strchr(str,character);
	puts(search_char);
	return 0;
}

memcpy

#include <string.h>
#include<stdio.h>
void* Memcpy(void* dest,const void* source,size_t count) {
	char* ddst =(char*)dest;
	const char* ssource = (char*)source;
	if(dest == NULL||source == NULL) {
		return NULL;
	}
	while(count--) {
		*ddst++ = *ssource++;
	}
	return dest;
}
int main() {
	const char string1[1024] = "i am a student";
	char string2[1024];
	Memcpy (string2,string1,strlen(string1)+1);
	printf("%s\n",string2);
	return 0;
}

memmove

#include <string.h>
#include<stdio.h>
#include <assert.h>

void *Mmemove(void* dest,const void* source,size_t count) {
	//备份一下指针好让返回时候的指针是从头开始的
	char* ddst =(char*)dest;
	const char* ssource = (char*)source;
	if(dest == NULL||source == NULL) {
		return NULL;
	}
	//地址不重叠时候,从前面开始复制
	if(ddst<=ssource||ddst>=ssource+count) {
		while(count--) {
			*ddst++ = *ssource++;
		}
	}
	//地址重叠时候,从尾部开始复制
	else {
		//减1 就是获取下标,到了尾指针
		ddst = ddst+count-1;
		ssource = ssource+count-1;
		while(count--) {
			*ddst-- = *ssource--;
		}
	}
	return dest;
}
int main() {
	const char string1[1024] = "i am a student";
	char string2[1024];
	Mmemove (string1+3,string1,strlen(string1)+1);
	printf("%s\n",string1+3);
}

猜你喜欢

转载自blog.csdn.net/weixin_44077227/article/details/89227918