104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数
104.字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数
1.字符串函数strlen
(1)strlen函数
strlen函数返回的是在字符串中’\0’前面出现的字符的个数
(2)strlen的使用
a.代码
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "abcdef";
printf("%d\n", strlen(str1));
return 0;
}
b.运行结果
6
(3)模拟实现strlen函数
size_t strlen(const char *str);
a.代码
#include<stdio.h>
#include<string.h>
size_t MyStrlen(const char* str1)
{
size_t len = 0;
while (*str1 != 0)
{
++len;
++str1;
}
return len;
}
int main()
{
char* str1 = "abcdef";
printf("%d\n", MyStrlen(str1));
return 0;
}
b.运行结果
6
(4)注意:
a.指针在传递(赋值,传参数)的过程中,权限不能放大,只能缩小
b.typedef unsigned int size_t
size_t就是无符号的整型
2.字符串函数strcpy
(1)strcpy函数
char* strcpy(char* destination, const char * source);
strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够
(destination的空间必须>=source的空间)
(2)strcpy的使用
a.代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char p1[] = "abcdef";
char* p2 = "hello";
strcpy(p1, p2);
printf("%s\n", p1);
printf("%s\n", p2);
return 0;
}
b.运行结果
hello
hello
c.错误举例
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char p1[] = "abcdef";
char* p2 = "hello";
const char* p3 = "world";
strcpy(p2, p3);
printf("%s\n", p2);
printf("%s\n", p3);
return 0;
}
错误分析:
(3)模拟实现strcpy
a.代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void MyStrcpy(char* dst, const char* src)
{
while (*src)
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
}
int main()
{
char p1[] = "abcdef";
const char* p2 = "hello";
MyStrcpy(p1, p2);
printf("%s\n", p1);
printf("%s\n", p2);
return 0;
}
b.运行结果
hello
hello
3.字符串函数strcat
(1)strcat函数
char* strcat(char* destination, const char * source);
strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容
(2)strcat的使用
a.代码
#include<stdio.h>
#include<string.h>
int main()
{
char p1[20] = "hello";
const char* p2 = " world";
strcat(p1, p2);
printf("%s\n",p1);
return 0;
}
b.运行结果
hello world
(3)模拟实现strcat
a.代码
#include<stdio.h>
#include<string.h>
void MyStrcat(char* dst, const char * src)
{
//让dst指向'\0'位置
while (*dst != '\0')
{
++dst;
}
//让dst从'\0'开始,将src赋值给dst
while (*dst = *src)
{
++dst;
++src;
}
*dst = '\0';
}
int main()
{
char p1[20] = "hello";
const char* p2 = " world";
MyStrcat(p1, p2);
printf("%s\n",p1);
return 0;
}
b.运行结果
hello world
4.字符串函数strcmp
(1)strcmp函数
int strcmp(const char * str1, const char * str2);
strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
(2)strcmp的使用
a.代码
#include<stdio.h>
#include<string.h>
int main()
{
char* p1 = "abcdef";
char* p2 = "abcdef";
char* p3 = "abcd";
char* p4 = "bcde";
printf("%d\n", strcmp(p1,p2 ));
printf("%d\n", strcmp(p1,p3 ));
printf("%d\n", strcmp(p3,p4 ));
}
b.运行结果
0
1
-1
(3)模拟实现strcmp
a.代码
#include<stdio.h>
#include<string.h>
int MyStrCmp(const char * str1, const char * str2)
{
//逐个元素比较
while (*str1 && *str2)
{
if (*str1 > *str2)
{
return 1;
}
else if (*str1 < *str2)
{
return -1;
}
else //如果两个元素相等,进入下一个继续比较
{
++str1;
++str2;
}
}
//str2比较完了,str1还有
if (*str1)
{
return 1;
}
//str1比较完了,str2还有
else if (*str2)
{
return -1;
}
//str1等于str2
else
{
return 0;
}
}
int main()
{
char* p1 = "abcd";
char* p2 = "abcd";
char* p3 = "abcde";
char* p4 = "bcd";
char* p5 = "b";
printf("%d\n", MyStrCmp(p1,p2 ));
printf("%d\n", MyStrCmp(p1,p3 ));
printf("%d\n", MyStrCmp(p1,p4 ));
printf("%d\n", MyStrCmp(p4,p5 ));
return 0;
}
b.运行结果
0
-1
-1
1
参考资料来源:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50886514/article/details/112606595