学习目标:
掌握string库中的基础函数
学习内容:
strcmp,strncpy, strncat,strstr函数的模拟实现!
一,strcmp函数的模拟实现!
strcmp函数是比较字符串的大小
#include <stdio.h>
int mycmp(const char* ch1, const char* ch2) //不允许修改字符串
{
while(*ch1==*ch2) //当字符串内容相同,进入循环
{
if(*ch1=='\0') //*ch1==*ch2=='\0'说明2个字符串完全相等
{
return 0; //返回 0
}
ch1++; //当*ch1==*ch2!='\0',就要判断下一个字符
ch2++;
}
if(*ch1 > *ch2) //某个字符的ASCLL值大于另一个值
{
return 1; //返回1
}
else
{
return -1; //与上述同理 ,小于返回-1;
}
}
int main()
{
char ch1[20]="abc"; //定义字符串1
char ch2[20]="abcdef"; //定义字符串2
if(mycmp(ch1,ch2) > 0) //调用函数,然后用函数的返回值与0比价
{
printf(">");
}
else if(mycmp(ch1,ch2) < 0)
{
printf("<");
}
else
{
printf("==");
}
return 0;
}
二,strncpy函数的模拟实现!
不同于strcpy,strncpy可以不限制字符串长度
#include <stdio.h>
#include <assert.h>
char* mystrncpy(char* ch1, const char* ch2,int m)
{
char* ret = ch1;
int i=0;
while(*ch1!='\0' && i<m) //由于用户输入的长度不确定,所以这里需要限制
{
*ch1 = *ch2; //*ch2覆盖*ch1
ch1++;
ch2++;
i++;
}
for(;i<=m;i++) //如果输入的长度超出字符串长度则,则剩余的长度都为'\0'
{
*ch1='\0';
ch1++;
}
return ret;
}
int main()
{
char ch1[20]="hello hello";
char ch2[20]="world";
mystrncpy(ch1,ch2,4);
printf("%s",ch1);
return 0;
}
三,strncat函数的模拟实现!
不同于strcat,strncat可以不限制字符串长度
#include <stdio.h>
void mystrncat(char* ch1,const char* ch2,int a)
{
int i=0;
while(*ch1!='\0') //先让被追加的数组找到'\0';
{
ch1++;
}
while(*ch2 != '\0' && i<a) //当有一方达到条件时停止
{
*ch1=*ch2;
ch1++;
ch2++;
i++;
}
for(;i<=a;i++) //补上'\0'标志字符串截止
{
*ch1='\0';
}
}
int main()
{
char ch1[20]="hello ";
char ch2[20]="world";
mystrncat(ch1,ch2,3);
printf("%s",ch1);
return 0;
}
用图形来解释这串代码