🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊
学习了函数后,老师让我们用函数来实现上面这四个字符串函数。
我们首先来了解一下这四个字符串函数:
1.strlen函数
用于获取字符串长度(不包括末尾的空字符'\0')
函数原型:size_t strlen(const char *str);
参数str是一个指向字符串的指针。
返回值:返回字符串的长度(无符号整数)。
strlen函数使用例子,
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
printf("%d\n", strlen(str)); // 输出:13
return 0;
}
接下来让我们用函数来实现strlen函数的功能
int Strlen(char ch[])
{
int count = 0;
while (*ch!='\0')//可以只写成 *ch,当*ch为'\0'时条件为假
{
count++;
ch++;
}
return count;
}
int main()
{
char ch[100];
scanf("%99s", ch);//读取最多99个字符以防止缓冲区溢出
printf("打印数组ch:\n");
printf("%s\n", ch);
//模拟调用strlen
printf("数组ch中输入的字符个数为:%d\n", Strlen(ch));
return 0;
}
还可以用递归函数来写一下
int DiguiStrlen(char* ch)
{
if ('\0' == *ch)
return 0;
else
return 1 + DiguiStrlen(ch + 1);
}
2.strcpy函数
用于将源字符串中的内容复制到目标字符串中。
函数原型:char *strcpy(char *dest, const char *src);
参数dest是目标字符串的指针,src是源字符串的指针。
返回值:返回目标字符串的指针。
注意:使用strcpy时必须确保目标字符串有足够的空间来存储源字符串,包括末尾的空字符 '\0'。否则,可能会导致缓冲区溢出,这是一个常见的安全漏洞。
strcpy函数使用例子,
#include <stdio.h>
#include <string.h>
int main()
{
char dest[20];
char src[] = "Hello, World!";
strcpy(dest, src);
printf("dest: %s\n", dest); // 输出:dest: Hello, World!
return 0;
}
用函数实现strcpy的功能:
void Strcpy(char* a,char* ch)
{
int i = 0;
for (i; ch[i]!='\0'; i++)
a[i] = ch[i];
a[i] = '\0';//给字符数组a后添加\0以确保其能够正确终止
}
int main()
{
char ch[100];
char a[100];
scanf("%99s", ch);//读取最多99个字符以防止缓冲区溢出
printf("打印数组ch:\n");
printf("%s\n", ch);
//模拟调用strcpy
Strcpy(a, ch);
printf("%s\n", a);
return 0;
}
注意要在函数中给目标字符数组a的最后添加'\0',我一开始经常忽略这部分,导致每次程序运行打印字符数组a时都打出很多个 烫烫烫 这样的乱码,这是内存中其他部分的随机字节被解释成字符后的结果。
3. strcmp函数
比较两个字符串中对应位置字符的ASCII码值的大小
函数原型:int strcmp(const char *str1, const char *str2);
如果str1小于str2,则返回值小于0
如果str1等于str2,则返回值为0
如果str1大于str2,则返回大于0
它是一个字符一个字符地比较,ASCII码值不同就返回结果;如果两个字符完全相同就返回0
strcmp函数使用例子,
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int r= strcmp(str1, str2);
printf("%d\n", r); // 输出:-1
return 0;
}
用函数实现strcmp的功能,
int Strcmp(char ch[],char* b,int len_ch,int len_b)
{
int len = 0;
//两个字符串长度不同时,先取相同长度
if (len_ch > len_b)
len = len_b;
else
len = len_ch;
int i = 0;
//比较相同长度部分
for (i; i < len; i++)
{
if (ch[i] > b[i])
return 1;
else if (ch[i] < b[i])
return -1;
//当前比较字符相同时,continue跳过后面
//进入下一次循环比较下一个字符
else
continue;
}
if (ch[i] == '\0' && b[i] == '\0')
return 0;
else if (ch[i] == '\0' && b[i] != '\0')
return -1;
else
return 1;
}
int main()
{
char ch[100];
char b[] = "grape";
scanf("%99s", ch);//读取最多99个字符以防止缓冲区溢出
printf("打印数组ch:\n");
printf("%s\n", ch);
//模拟调用strcmp
printf("%d\n", Strcmp(ch,b,Strlen(ch),Strlen(b)));
return 0;
}
4. strcat函数
将源字符内容拼接到目标字符末尾。
原型:char *strcat(char *dest, const char *src);
参数dest是目标字符串的指针,src是源字符串的指针。
返回值:返回目标字符串的指针。
注意:使用strcat时必须确保目标字符串有足够的空间来存储追加后的字符串,包括末尾的空字符 '\0'。否则,可能会导致缓冲区溢出。
strcat函数使用例子,
#include <stdio.h>
#include <string.h>
int main() {
char dest[100] = "Hello, ";
char src[] = "World!";
strcat(dest, src);
printf("%s\n", dest); // 输出:Hello, World!
return 0;
}
用函数实现strcat的功能:
void Strcat(char ch[], char b[],int len_ch)
{
int i = len_ch;
for (i; *b != '\0'; i++)
{
ch[i] = *b;//将字符数组b的内容拼接在字符数组ch后面
b++;
}
ch[i] = '\0';
}
int main()
{
char ch[100];
char b[] = "grape";
scanf("%99s", ch);//读取最多99个字符以防止缓冲区溢出
printf("打印数组ch:\n");
printf("%s\n", ch);
//模拟调用strcat
Strcat(ch, b, Strlen(ch));
printf("%s\n", ch);
return 0;
}
🎉🎉本次的内容结束啦,欢迎有问题评论区讨论。
😘💕希望大家能够三连支持,你们的鼓励是我前进的动力
🌹🌹谢谢观看!