理解strcat、strncat、strcpy、strncy、strcmp、strncmp。
一.strcat追加字符串
1.strcat
①先使用一下strcat函数试试:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdef";
char arr1[4]="ghi";
strcat(arr,arr1);
printf("%s\n",arr);
return 0;
}
运行结果如下:
注意使用该函数的几点:
1.该函数使用时,目标字符数组的空间要大于资源字符数组的空间,否则会导致数组越界。
2.既然目标字符数组的空间要大于字符数数的空间间,那么目标字符数的大小就必须给定。
②模拟实现strcat:
#include<stdio.h>
#include<string.h>
char* my_strcat(char* arr,const char* arr1)
{
char* temp = arr;
while(*arr)
{
arr++;
}
while(*arr1)
{
*arr=*arr1;
arr++;
arr1++;
}
*arr=*arr1;
return temp;
}
int main()
{
char arr[12]="abcdef";
char arr1[5]="ghie";
my_strcat(arr,arr1);
printf("%s\n",arr);
return 0;
}
二:strncat函数
①使用strncat试试:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdef";
char arr1[5]="ghie";
int count = 3;
strncat(arr,arr1,count);
printf("%s\n",arr);
return 0;
}
注意的事项:
使用该函数和使用strcat函数差不多,要注意数组越界问题。
②模拟实现strncat函数:
#include<stdio.h>
#include<string.h>
char* my_strncat(char* arr,const char* arr1,int count)
{
char* temp = arr;
while(*arr)
{
arr++;
}
while(count)
{
*arr=*arr1;
arr++;
arr1++;
count--;
}
*arr=0;
return temp;
}
int main()
{
char arr[12]="abcdef";
char arr1[5]="ghie";
int count = 3;
my_strncat(arr,arr1,count);
printf("%s\n",arr);
return 0;
}
三.strcpy
①使用strcpy:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdefgs";
char arr1[5]="hehe";
strcpy(arr,arr1);
printf("%s\n",arr);
return 0;
}
使用该函数时应注意:数组越界问题!
②模拟实现此函数:
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* dest,const char* str)
{
char* temp=dest;
assert(dest&&str);
while(*str)
{
*dest=*str;
dest++;
str++;
}
*dest=*str;
return temp;
}
int main()
{
char arr[12]="abcdefdg";
char arr1[5]="hehe";
my_strcpy(arr,arr1);
printf("%s\n",arr);
return 0;
}
四.strncpy
①使用strncpy:
代码如下
#include <stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdefdg";
char arr1[5]="hehe";
strncpy(arr,arr1,4);
printf("%s\n",arr);
return 0;
}
②模拟实现strncpy:
#include<stdio.h>
#include<string.h>
char* my_strncpy(char* dest,const char* str,int count)
{
char* temp = dest;
while(count&&(*dest++=*str++))
{
count--;
}
if(count)
{
while(count)
{
*dest++='\0';
}
}
return temp;
}
int main()
{
char arr[12]="abcdefdg";
char arr1[5]="hehe";
my_strncpy(arr,arr1,4);
printf("%s\n",arr);
return 0;
}
五.strcmp函数
①使用strcmp
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdefghd";
char arr1[12]="abcdefghd";
char arr2[12]="abcdeghd";
int ret=strcmp(arr,arr1);
int ret1=strcmp(arr,arr2);
printf("%d %d\n",ret,ret1);
return 0;
}
②模拟实现strcmp函数:
代码如下:
int my_strcmp(const char* arr1,const char* arr2)
{
assert(arr1);
assert(arr2);
while((*arr1!=0)&&(*arr2!=0))
{
if((*arr1==*arr2))
{
arr1++;
arr2++;
}
else
return *arr1-*arr2;//返回两字符相差的ASC码值
}
return *arr1-*arr2;
}
int main()
{
char arr[12]="abcdefghd";
char arr1[12]="abcdefghd";
char arr2[12]="abcdeghd";
int ret=my_strcmp(arr,arr1);
int ret1=my_strcmp(arr,arr2);
printf("%d %d\n",ret,ret1);
return 0;
}
六.strncmp函数
①使用strncmp:
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[12]="abcdefg";
char arr1[12]="abcdfg";
int n=strncmp(arr,arr1,3);
int m=strncmp(arr,arr1,5);
printf("%d %d\n",n,m);
return 0;
}
②模拟实现strncmp
int my_strncmp(const char* str1,const char* str2,int count)
{
while(count&&(*str1)&&(*str2))
{
if(*str1==*str2)
{
str1++;
str2++;
count--;
}
else
return *str1-*str2;
}
return *str1-*str2;
}
int main()
{
char arr[12]="abcdefg";
char arr1[12]="abcdfg";
int n=my_strncmp(arr,arr1,3);
int m=my_strncmp(arr,arr1,5);
printf("%d %d\n",n,m);
return 0;
}