《小菜狗 C 语言入门 + 进阶笔记》(28)字符串处理函数【一文讲清 strlen strcpy strcmp strcat 最常用四个字符串函数的使用!】


《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介

1、引入

用于输入输出的字符串函数,例如printfputsscanfgets等,使用时要包含头文件stdio.h,而使用其它字符串函数要包含头文件string.hstring.h其中有大量操作字符串的函数:

本节涉及函数英文全称序号函数 & 目的
strcmp: string comparestrcpy(s1, s2);复制字符串 s2 到字符串 s1。
strcat: string catenatestrcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。
strcpy: string copystrlen(s1);返回字符串 s1 的长度。
strlen: string lengthstrcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。
strlwr: string lowercasestrchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
strupr: string upercasestrstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

我们下面拿应用开发最常用的几个函数讲一下!

2、字符串长度函数 strlen()

2.1、原型
size_t strlen (const char * str); 

字符串拷贝,拷贝到源头字符串中的 \0 为⽌。

2.2、注意点
  • strlen 函数统计的是字符串中 '\0' 之前的``字符的个数,所以传递给 strlen 函数的形参字符串中必须得包含 '\0'
  • strlen 函数的返回值为 size_t,是⽆符号的( 易错 );
  • strlen 函数的使用需要包含头⽂件
2.3、代码举例
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[10] = "abcdef";
    printf("%d\n", strlen(str1));

    char str2[10] = {'a', 'b', 'c', 'd', 'e', 'f'};
    printf("%d\n", strlen(str2));

    char str3[] = {'a', 'b', 'c', 'd', 'e', 'f'};
    printf("%d\n", strlen(str3));

    //strlen 和 sizeof 的对比
    printf("%d\n", strlen(str1));
    printf("%d\n", sizeof(str1));
    return 0;
}

运行结果:

6
6
14
6
10
2.4、详细分析

在这里插入图片描述

str1 数组是使用常量字符串初始化,也是不完全初始化,前⾯ 7 个元素存放了 a、b、c、d、e、f、\0,剩余的元素默认初始化为 0,也就是 \0。

在这里插入图片描述

str2 数组是使用大括号的⽅式初始化,也是不完全初始化,前⾯ 6 个元素存放了 a、b、c、d、e、f,剩余的元素默认初始化为 0,也就是 \0。

在这里插入图片描述

str3 数组也是使用大括号初始化的,同时没有直接指定数组大小,数组大小是根据初始化内容来确定的。数组中仅存储了 a、b、c、d、e、f,没有 \0 字符。

3、strlen 与 sizeof 的区别

strlen 是函数,sizeof 是运算操作符,二者得到的结果类型为 size_t,即 unsigned int 类型。

  • sizeof 计算的是变量的大小,不受字符 \0 影响
  • strlen 计算的是字符串的长度,以 \0 作为长度判定依据

例如:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    char s[] = { "hello,world!" };
    printf("s = %s\n", s);
    printf("sizeof(s) = %d\n", sizeof(s));
    printf("strlen(s) = %d\n", strlen(s));
    return 0;
}

输出结果为:

s = hello,world!
sizeof(s) = 13
strlen(s) = 12

4、字符串复制函数 strcpy()

字符串拷贝,拷贝到源头字符串中的 ‘\0’ 为⽌。

简单说就是,字符串复制,也即将字符串从一个地方复制到另外一个地方。

4.1、原型
char* strcpy(char * destination, const char * source); 

strcpy() 函数会把 source 中的字符串拷贝到 destination 中,字符串结束标志'\0'也一同拷贝

参数

destination :指针,指向目的地空间;

source :指针,指向源头数据;

返回值

strcpy 函数返回的目标空间的起始地址;

4.2、注意点
  • 源字符串必须以 ‘\0’ 结束;
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间;
  • 目标空间必须⾜够大,以确保能存放源字符串;
  • 目标空间必须可修改;
4.3、代码举例
#include <stdio.h>
#include <string.h>
int main(){
    char str1[50] = "《C语言入门教程》";
    char str2[50] = "http://baidu.com";
    strcpy(str1, str2);
    printf("str1: %s\n", str1);

    return 0;
}

运行结果:

str1: http://baidu.com

将 str2 复制到 str1 后,str1 中原来的内容就被覆盖了。

5、字符串比较函数 strcmp()

用来比较 str1 和 str2 指向的字符串,从两个字符串的第⼀个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。

字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。

5.1、原型
int strcmp (const char * str1, const char * str2);

参数

str1 :指针,指向要比较的第⼀个字符串;

str2 :指针,指向要比较的第二个字符串;

返回值

int 型(大于 0 的数字 | 0 | 小于 0 的数字);

5.2、注意点
  • 第⼀个字符串大于第二个字符串,则返回大于 0 的数字;
  • 第⼀个字符串等于第二个字符串,则返回 0;
  • 第⼀个字符串小于第二个字符串,则返回小于 0 的数字;
5.3、代码举例

对 4 组字符串进行比较:

#include <stdio.h>
#include <string.h>
int main(){
    char a[] = "aBcDeF";
    char b[] = "AbCdEf";
    char c[] = "aacdef";
    char d[] = "aBcDeF";
    printf("a VS b: %d\n", strcmp(a, b));
    printf("a VS c: %d\n", strcmp(a, c));
    printf("a VS d: %d\n", strcmp(a, d));
   
    return 0;
}

运行结果:

a VS b: 32
a VS c: -31
a VS d: 0

6、字符串连接函数 strcat()

strcat 是 string catenate 的缩写,意思是把两个字符串拼接在一起。

6.1、原型
char * strcat (char * destination, const char * source); 

source 、destination 为需要拼接的字符串。

用来字符串追加,把 source 指向的源字符串中的所有字符都追加到 destination 指向的空间中。

参数

destination :指针,指向目的地空间;

source :指针,指向源头数据;

返回值

strcat 函数返回的目标空间的起始地址;

6.2、注意点
  • 源字符串source 必须以 ‘\0’ 结束。
  • 目标字符串destination 中也得有 \0 ,否则没办法知道追加从哪⾥开始。
  • strcat() 将把 source 连接到 destination 后面,并删除原来 destination 最后的结束标志'\0'

这意味着:destination 必须足够长,要能够同时容纳 source 和 destination ,否则会越界(超出范围)

  • strcat() 的返回值为 destination 的地址。
6.3、代码举例
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[100]="The URL is ";
    char str2[60];

    printf("Input a URL: ");
    gets(str2);

    strcat(str1, str2);
    puts(str1);
   
    return 0;
}

运行结果:

Input a URL: http://baidu.com↙
The URL ishttp://baidu.com

您可以在 C 标准库中找到更多字符串相关的函数。

《小菜狗 C 语言入门 + 进阶笔记》目录:《小菜狗 C 语言入门 + 进阶笔记》(0)简介


每日一更!

公众号、优快云等博客:小菜狗编程笔记

谢谢点赞关注哈!目前在飞书持续优化更新~

日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菜狗编程笔记

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值