1.strlen
法一:常规法
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 100
int my_strlen(const char*str)
{
assert(str != NULL);
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char str[N] = "LoveHoneyYou";
int len=my_strlen(str);
printf("%d\n", len);
system("pause");
return 0;
}
法二: 指针相减
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 100
int my_strlen(const char*str)
{
assert(str != NULL);
char *cp = str;
while (*cp != '\0')
{
cp++;
}
return (int)(cp-str);
}
int main()
{
char str[N] = "LoveHoneyYou";
int len=my_strlen(str);
printf("%d\n", len);
system("pause");
return 0;
}
2.strcpy
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 100
void my_strcpy(char *dest, char *src)
{
while (*src != '\0')
{
*dest++ = *src++;
}
*dest = *src;
}
int main()
{
char stra[N] = "LoveHoneyYou";
char strb[N] = "Love dearest you";
my_strcpy(stra, strb);
printf(stra);
printf("\n");
system("pause");
return 0;
}
3.strcat
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define N 100
void my_strcat(char *dest, char *src)
{
char*cp = dest;
while (*cp!= '\0')
{
cp++;
}
while (*src!='\0')
{
*cp++ = *src++;
}
*cp = *src;
}
int main()
{
char stra[N] = "Love Honey You ";
char strb[N] = "My dear friend";
my_strcat(stra, strb);
printf(stra);
printf("\n");
system("pause");
return 0;
}
4.strcmp
#include <stdio.h>
#include <stdlib.h>
#define N 100
int my_strcmp(char *dest, char *src)
{
while (*dest != '\0' || *src != '\0')
{
if (*dest == *src)
{
dest++;
src++;
}
else if (*dest < *src)
{
return -1;
}
else
{
return 1;
}
}
return 0;
}
int main()
{
char stra[N] = "I Love You ";
char strb[N] = "You Love Me ";
int ret = my_strcmp(stra, strb);
printf("ret=%d\n", ret);
system("pause");
return 0;
}
5.strchr //字符的首次出现
#include <stdio.h>
#include <stdlib.h>
#define N 100
char* my_strchr(char *str, char ch)
{
while (*str != '\0')
{
if (*str == ch)
{
break;
}
str++;
}
return str;
}
int main()
{
char stra[N] = "I Love You ";
char*ch = my_strchr(stra, 'Y');
printf("%c \n", *ch);
system("pause");
return 0;
}
6.strrchr //字符最后一次出现
#include <stdio.h>
#include <stdlib.h>
#define N 100
char* my_strrchr(char *str, char ch)
{
char*cp = str;
while (*cp != '\0')
{
cp++;
}
cp = cp - 1;
while (cp != str - 1)
{
if (*cp == ch)
{
return cp;
}
cp--;
}
return NULL;
}
int main()
{
char stra[N] = "I Love You ";
char*ch = my_strrchr(stra, '0');
system("pause");
return 0;
}
7.strstr //查找字串 (爸爸找儿子)
(1) 使用三个变量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void my_strstr(char* father, char *son)
{
int len_Fa = strlen(father); //父串长度
int len_So = strlen(son); //字串长度
int tmp = 0;
for (int i = 0; i < len_Fa - len_So+1; i++)
{
int sign = i;
for (int j = 0; j < len_So; j++)
{
if (father[sign] != son[j])
{
break;
}
tmp = j;
sign++;
}
if (tmp == len_So - 1)
{
printf("找到了,是爸爸的好儿子\n");
break;
}
if (i == len_Fa - len_So + 1-1)
{
printf("找不到,不是爸爸的好儿子\n");
}
}
}
int main()
{
char arr[N] = "ddsadabsdasd";
char brr[N] = "abs";
my_strstr(arr, brr);
system("pause");
return 0;
}
(2)不使用第三个变量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void my_strstr(char* father, char *son)
{
int len_Fa = strlen(father); //父串长度
int len_So = strlen(son); //字串长度
int tmp = 0;
for (int i = 0; i < len_Fa - len_So+1; i++)
{
for (int j = 0; j < len_So; j++)
{
if (father[i+j] != son[j])
{
break;
}
tmp = j;
}
if (tmp == len_So - 1)
{
printf("找到了,是爸爸的好儿子\n");
break;
}
if (i == len_Fa - len_So + 1-1)
{
printf("找不到,不是爸爸的好儿子\n");
}
}
}
int main()
{
char arr[N] = "ddsadabsdasdsfhsdkjfhkdshfh";
char brr[N] = "fhsdk";
my_strstr(arr, brr);
system("pause");
return 0;
}