🥰欢迎关注 轻松拿捏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);//模拟调用strlenprintf("数组ch中输入的字符个数为:%d\n", Strlen(ch));return 0;
}
还可以用递归函数来写一下
int DiguiStrlen(char* ch)
{if ('\0' == *ch)return 0;elsereturn 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);//模拟调用strcpyStrcpy(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;elselen = 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跳过后面//进入下一次循环比较下一个字符elsecontinue;}if (ch[i] == '\0' && b[i] == '\0')return 0;else if (ch[i] == '\0' && b[i] != '\0')return -1;elsereturn 1;}
int main()
{char ch[100];char b[] = "grape";scanf("%99s", ch);//读取最多99个字符以防止缓冲区溢出printf("打印数组ch:\n");printf("%s\n", ch);//模拟调用strcmpprintf("%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);//模拟调用strcatStrcat(ch, b, Strlen(ch));printf("%s\n", ch);return 0;
}
🎉🎉本次的内容结束啦,欢迎有问题评论区讨论。
😘💕希望大家能够三连支持,你们的鼓励是我前进的动力
🌹🌹谢谢观看!