strlen、strcpy、strcmp、strcat、strstr函数均为字符串处理函数,使用时需要包含头文件string.h
strlen函数主要用于求字符串的长度。
#include <stdio.h>
int my_strlen(const char* str)
{
int count = 0;
while (*str++) //\0的ASCII码是0
{
count++;
}
return count;
}
int main()
{
char ch[] = "student";
printf("%d", my_strlen(ch));
return 0;
}
1、用指针相减方法
2、用递归的方法
原型: ? char* strcpy(char *dest,char *src) ? ?功能:将源字符串复制到目的字符串(包括源字符串最后的\0),函数返回值为目的字符串首地址
?注意事项:1、要保证目的字符数组足够大 ?2、主函数中的目的字符串不能用char*来定义(char*默认定义为常量字符串,内容不可修改)
//1.简单易懂版
#include <stdio.h>
char* my_strcpy(char* dest,char* src)
{
char* ret = dest; //提前保存目的字符串首地址
while (*src != '\0') //*src
{
*dest = *src;
src++;
dest++;
}
*dest = *src; //复制最后的\0
return ret;
}
int main()
{
char ch1[20] = { 0 };
char ch2[] = "student";
printf("%s", my_strcpy(ch1,ch2));
return 0;
}
//2.优化版本
#include <stdio.h>
char* my_strcpy(char* dest, char* src)
{
char* ret = dest; //提前保存目的字符串首地址
while (*dest++ = *src++) //src最后的\0也会复制给dest,且*dest最后的结果是\0(ASCII码为0),退出循环。
{
;
}
return ret;
}
int main()
{
char ch1[20] = { 0 };
char ch2[] = "student";
printf("%s", my_strcpy(ch1, ch2));
return 0;
}
原型: ?int strcmp(const char* s1,const char* s2) ? ? 功能:逐个比较两个字符串每个字符的大小,返回值>0、=0、<0分别表示第一个字符串大于、等于、小于第二个字符串
#include <stdio.h>
int my_strcpy(const char* s1, const char* s2)
{
while (*s1 == *s2)
{
if (*s1 == '\0')
{
return 0; //两个字符串相等,直接返回,不需要下面的指针++
}
s1++;
s2++;
}
if (*s1 > *s2) //return *s1-*s2;
{
return 1;
}
else
{
return -1;
}
}
int main()
{
int temp = my_strcpy("strlena", "strlena");
if (temp > 0)
{
printf("第一个字符串大");
}
else if (temp < 0)
{
printf("第二个字符串大");
}
else
printf("两个字符串一样大");
return 0;
}
函数原型: ?char* strcat(char* dest,const char* src) ? ?函数功能:将src字符串从dest的\0位置开始复制,一直复制到src的最后
#include <stdio.h>
char* my_strcat(char* dest, char* src)
{
char* ret = dest; //提前保存目的字符串首地址
while (*dest) //找到dest字符串\0的位置
{
dest++;
}
while (*dest++ = *src++) //src最后的\0也会复制给dest,且*dest最后的结果是\0(ASCII码为0),退出循环。
{
;
}
return ret;
}
int main()
{
char ch1[20] ="good ";
char ch2[] = "student";
printf("%s", my_strcat(ch1, ch2));
return 0;
}
函数原型:char* strstr(const char* str1,const char* str2) ?功能:在str1字符串中寻找str2字符串,如果找到,返回str1中指向str2首元素的指针,没有找到返回NULL
思路:分别从str1的第n个元素与str2进行匹配(建立两个指针s1与s2操作),不满足则后移str1的指针(建立第一个指针cur操作)。
退出比较的3个条件:1.s1 != \0,s2 == \0 找到了 2.s2找到了\0 找到了 3.*s1 != *s2
#include <stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
char* cur = (char*)str1;
char* s1 = NULL;
char* s2 = NULL;
if (*str2 == '\0') //特殊情况,str2为'\0'的情况
{
return cur;
}
while (*cur)
{
s1 = cur;
s2 = str2;
while (*s1 && *s2 && *s1 == *s2) //避免str1与str2相等,指针向后移越界访问的情况
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cur;
}
cur++;
}
return NULL;
}
int main()
{
char ch1[] ="goodsstudents";
char ch2[] ="student";
if (my_strstr(ch1, ch2) == NULL)
{
printf("没找到");
}
else
{
printf("找到了");
printf("%s", my_strstr(ch1, ch2));
}
return 0;
}