字符串函数
- 求字符串长度
strlen - 长度不受限制
strcpy
strcat
strcmp - 长度受限制
strncpy
strncat
strncmp
1. strlen(求字符串长度)
1.1 语法
头文件:string.h
函数:size_t strlen ( const char * str )
返回类型是size_t型,也就是unsigned int型;接收的是字符串的首地址
注意:函数遇见‘\0’字符计算即停止,字符串长度不包括字符串结尾的‘\0’;
1.2 示例代码:
#include<string.h>
int main()
{
char s1[] = "123456789";
char s2[] = "123456";
int ret1 = strlen(s1);
int ret2 = strlen(s2);
printf("字符串s1的长度:%d\n", ret1);
printf("字符串s2的长度:%d\n", ret2);
return 0;
}
1.3 模拟实现strlen
unsigned int my_strlen(const char* p)
{
unsigned int i = 0;
while (*p != '\0')
{
p++;
i++;
}
return i;
}
int main()
{
char s1[] = "123456789";
int ret1 = my_strlen(s1);
printf("字符串s1的长度:%d\n", ret1);
return 0;
}
2. strcpy(拷贝字符串)
2.1 语法
头文件:string.h
char * strcpy ( char * destination, const char * source );
(其中char * destination接收的是复制的目的地,const char * source接受的是是要复制的源头,返回类型是复制的目的地的首地址)
注意:
- 源字符串必须以 ‘\0’ 结束。
- 会将源字符串中的 ‘\0’ 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串
2.2 示例代码
#include<string.h>
int main()
{
char s1[] = "hello world!";
char s2[20];
strcpy(s2, s1);
printf("%s\n", s2);
return 0;
}
2.3 模拟实现strcpy
#include<string.h>
char* my_strcpy(char* destination, const char* source)
{
char* d = destination;
while (*destination++ = *source++)
{
;
}
return d;
}
int main()
{
char s1[] = "hello world!";
char s2[20];
my_strcpy(s2, s1);
printf("%s\n", s2);
return 0;
}
3. strcat(追加字符串)
3.1 语法
头文件:string.h
char * strcat ( char * destination, const char * source );
(其中char * destination接收的是被追加的字符串的首地址,const char * source接受的是追加的字符串的源头,返回类型是要被追加的字符串的首地址)
注意:
- 源字符串必须以 ‘\0’ 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
3.2 代码示例
#include<string.h>
int main()
{
char s1[20] = "hello ";
char s2[20] = "world!";
strcat(s1, s2);
printf("%s\n", s1);
return 0;
}
3.3 模拟实现strcat
#include<string.h>
char* my_strcat(char* destination, const char* source)
{
char* p = destination;
while (*destination)
{
destination++;
}
while (*destination++ = *source++)
{
;
}
return p;
}
int main()
{
char s1[20] = "hello ";
char s2[20] = "world!";
my_strcat(s1, s2);
printf("%s\n", s1);
return 0;
}
4.strcmp(比较字符串大小)
strcmp比较字符串大小不是字符串的长度,而是比较第一个不匹配的字符的ASCII码值的大小!!!
4.1 语法
头文件:string.h
int strcmp ( const char * str1, const char * str2 )
str1、str2是要比较的字符串
返回值
- 若两字符串相等则,则返回值为0
- 第一个不匹配的字符在 str1 中的值低于 str2 中的值,返回<0的数
- 第一个不匹配的字符在 str1 中的值大于 str2 中的值,返回>0的数
4.2 示例代码
#include<string.h>
int main()
{
char s1[20] = "123456789 ";
char s2[20] = "123459!";
int ret = strcmp(s1, s2);
printf("%d\n", ret);
return 0;
}
4.3 模拟实现strcmp
#include<string.h>
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
str1++,str2++;
}
return *str1 - *str2;
}
int main()
{
char s1[20] = "123456789 ";
char s2[20] = "123459!";
int ret = my_strcmp(s1, s2);
printf("%d\n", ret);
return 0;
}
5.strncpy(限制型复制字符串)
5.1 语法
头文件:string.h
char * strncpy ( char * destination, const char * source, size_t num );
拷贝num个字符从源字符串到目标空间。
返回的地址是目标空间的首地址
strncpy不默认添加‘\0’
5.2 代码示例
#include<string.h>
int main()
{
char s1[20] = "hellow ";
char s2[20] = "";
strncpy(s2, s1, 3);//strncpy不默认添加‘\0’
printf("%s\n", s2);
return 0;
}
5.3 模拟实现strncpy
#include<string.h>
char* my_strncpy(char* destination, const char* source, size_t num)
{
char* p = destination;
int i = 0;
while (num)
{
*destination++ = *source++;
num--;
}
return p;
}
int main()
{
char s1[20] = "hellow ";
char s2[20] = "";
my_strncpy(s2, s1, 3);//strncpy不默认添加‘\0’
printf("%s\n", s2);
return 0;
}
6.strncat(限制型追加字符串)
6.1 语法
头文件:string.h
char * strncat ( char * destination, const char * source, size_t num );
追加num个字符从源字符串到目标空间。
返回的地址是目标空间的首地址
目标空间要足够大
6.2 代码示例
#include<string.h>
int main()
{
char s1[20] = "hellow ";
char s2[20] = "world!!!";
strncat(s1, s2, 7);//
printf("%s\n", s1);
return 0;
}
6.3 模拟实现strncat
#include<string.h>
char* my_strncat(char* destination, const char* source, size_t num)
{
char* p = destination;
unsigned int i = 0;
while (*destination)
{
destination++;
}
for (i = 0; i < num; i++)
{
*destination++ = *source++;
}
return p;
}
int main()
{
char s1[20] = "hellow ";
char s2[20] = "world!!!";
my_strncat(s1, s2, 7);//
printf("%s\n", s1);
return 0;
}
7.strncmp(限制型比较字符串)
7.1 语法
头文件:string.h
int strncmp ( const char * str1, const char * str2, size_t num );
str1、str2比较num个字符
返回值(比较num个字符):
- 若两字符串相等则,则返回值为0
- 第一个不匹配的字符在 str1 中的值低于 str2 中的值,返回<0的数
- 第一个不匹配的字符在 str1 中的值大于 str2 中的值,返回>0的数
7.2 代码示例
#include<string.h>
int main()
{
char s1[20] = "123456789";
char s2[20] = "163459";
int ret = strncmp(s1, s2, 6);
printf("%d\n", ret);
return 0;
}
7.3 模拟实现strncmp
#include<string.h>
int my_strncmp(const char* str1, const char* str2, size_t num)
{
unsigned int i = 0;
while (*str1 == *str2&&i<=num)
{
str1++, str2++, i++;
}
if (i == num)
return 0;
else
return *str1 - *str2;
return 0;
}
int main()
{
char s1[20] = "123456789";
char s2[20] = "163459";
int ret = my_strncmp(s1, s2, 6);
printf("%d\n", ret);
return 0;
}
好的同学们,到这我们就结束了,欢迎大家来提建议!!!😜