my_strcat(字符串连接)
写法1
//写法一
char* my_strcat1(char* dest, char* src)
{
int i = 0;
//向让i对应'\0'位置
while(dest[i] != '\0')//可以将dest[i]写成*(src+i)
{
i++;
}
//将src的字符串全部拷贝获取连接在尾巴上
int j = 0;
while(src[j] != '\0')
{
dest[i] = src[j];
i++;
j++;
}
return dest;
}
写法2
//写法二
char* my_strcat2(char* dest, char* src)
{
char* temp = dest;
//将指针,移动到'\0'位置
while(*dest != '\0')
{
dest++;
}
//类似于strcpy的拷贝操作
while(*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return dest;
}
写法3
//写法三,写法二的简写
char* my_strcat3(char* dest, char* src)
{
char *temp = dest;
//将指针,移动到'\0'位置
while(*++dest);
//类似于strcpy的拷贝操作
while(*dest++ = *src++);
return temp;
}
my_strcmp(字符串比较)
写法1
int my_strcmp1(char* s1, char* s2)
{
int i = 0;
while(s1[i] != '\0' || s2[i] != '\0')//也可以将s1[i]写成*(s1+i)
{
if(s1[i] > s2[i])
return 1;
else if(s1[i] < s2[i])
return -1;
else//相等,i++,继续比较下一个字符
i++;
}
//只有当s1[i]和s2[i]同时到达'\0'的时候才循环才会结束,只有一种情况才能
//同时到达'\0'那就是字符串相等的时候,直接返回0
return 0;
}
写法2
int my_strcmp2(char* s1, char* s2)
{
while(*s1 != '\0' || *s2 != '\0')
{
if(*s1 > *s2)
return 1;
else if(*s1 < *s2)
return -1;
else//相等,同时移动指针,指向下一个字符
{
s1++;
s2++;
}
}
//只有当*s1和*s2同时到达'\0'的时候才循环才会结束,只有一种情况才能
//同时到达'\0'那就是字符串相等的时候,直接返回0
return 0;
}
my_strcpy(字符串拷贝)
写法1
//写法一
char* my_strcpy1(char* dest, char *src)
{
int i = 0;
while(src[i] != '\0')//或者将src[i]写成*(src+i)
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return dest;
}
写法2
//写法二
char* my_strcpy2(char* dest, char* src)
{
//先定义一个临时的指针变量将字符串的首地址保存起来
//因为在拷贝的过程中dest++,移动了指针,拷贝后dest指向的是'\0'位置
//不再是字符串的第一个字符
char* temp = dest;
while(*src != '\0')
{
*dest = *src;
src++;
dest++;
}
*dest = '\0';
return temp;
}
写法3
//写法三
char* my_strcpy3(char* dest, char* src)
{
char* temp = dest;
while(*dest++ = *src++);
return temp;
}
my_strlen(求字符串长度)
写法1
//写法一
int my_strlen1(char* s)
{
int i = 0;
while(*(s+i) != '\0')
{
i++;
}
return i;
}
写法2
//写法二
int my_strlen2(char* s)
{
int i = 0;
while(s[i] != '\0')
{
i++;
}
return i;
}
写法3
//写法三
int my_strlen3(char* s)
{
int len = 0;
while(*s != '\0')
{
len++;
s++;
}
return len;
}