版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34719188/article/details/83931301
说明
标准字符串:以 ‘\0’ 作为字符串的结束符
不使用 C/C++ 库函数,编程实现以下函数功能
- int strcmp( char * str1, char * str2 );
- char * strcpy( char * str1, char * str2 );
- char * strcat( char * str1, char * str2 );
- int strlen( char * str );
- char * strstr( char * str1, char * str2 );
以上函数只能处理标准字符串!!!
strcmp()
int mystrcmp(const char *str1,const char *str2)
{
if(str1==NULL || str2==NULL)
{
printf("The string is error!\n"); /*非法的字符串比较,程序终止*/
exit(0);
}
while(*str1!='\0' && *str2!='\0' && *str1 == *str2)
{
str1++; /*将两个字符串从头开始逐个字符进行比较*/
str2++;
}
if(*str1 != '\0' && *str2 == '\0')
{
return 1; /*字符串str2已经比较到了结尾,而字符串str1还没有到结尾*/
}
else if(*str1 == '\0' && *str2 != '\0')
{
return -1; /*字符串str1已到结尾,而字符串str2还没有到结尾*/
}
else if(*str1 > *str2)
{
return 1; /*字符串str1中的字符大于str2中的字符*/
}
else if(*str1 < *str2)
{
return -1; /*字符串str1中的字符小于str2中的字符*/
}
return 0; /*字符串相等,返回0*/
}
strcpy()
char *mystrcpy(char *str1, const char *str2) {
char *p = str1;
if(p == NULL || str2 == NULL) {
printf("The string is error!\n"); /*非法的字符串拷贝*/
exit(0);
}
while(*str2 != '\0') { /*实现字符串的拷贝*/
*p = *str2;
p++;
str2++;
}
*p = '\0'; /*向字符串str1中添加结束标志*/
return str1; /*返回目的字符串的头指针*/
}
strcat()
char *mystrcat(char *dst, const char *src) {
assert(dst != NULL && src != NULL);
char *temp = dst;
while (*temp != '\0')
temp++;
while ((*temp++ = *src++) != '\0');
return dst;
}
strlen()
int mystrlen(const char *str) {
int i;
i = 0;
while((*str++) != '\0') {
i++;
}
return i;
}
strstr()
char *mystrstr(const char *str1, const char *str2) {
char *src, *sub;
if(str1 == NULL || str2 == NULL) {
printf("The string is error!\n");
exit(0);
}
while(*str1 != '\0') {
src = str1;
sub = str2;
do {
if(*sub == '\0') {
return str1; /*找到子串*/
}
} while(*src++ == *sub++);
str1++;
}
return NULL;
}