C语言基础语法-教案13(从小白到劝退之字符串函数)

在这里插入一个小广告,最近给大家争取到一个 深夜福利

保证你在深夜手机刷到 嘎嘎香~

那就是  大流量卡-湘久卡  

185GB 100分钟通话时长~

畅想自由的气息

  重要的是 长期套餐~

流量自由的同时还拥有超长通话,而且免费领取。

废话不多说直接上图。名额有限,感兴趣的家人私我或者直接加微信:lyg15314144781

函数strstr

功能

在一个指定的字符串中,找到一个子串

所需头文件

#include

函数原型

char *strstr(const char *haystack, const char *needle);

参数

haystack

指定的字符串

needle

需要查找的子串

返回值

成功

指向子串的指针

失败

NULL

  • 示例:
char *s = "abcd.txt";
char *p = strstr(s, ".wps");

if(p == NULL)
    printf("文件[%s]不是WPS文件\n", s);
else
    printf("文件[%s]是WPS文件\n", s);

函数strlen

功能

求一个指定字符串的长度

所需头文件

#include

函数原型

size_t strlen(const char *s);

参数

s

需要求长度的字符串

返回值

字符串的长度,不包含字符串结束标记 '\0'

  • 示例:
char *s = "www.yueqian.com.cn";
printf("粤嵌官网地址的长度是:%d\n", strlen(s));

函数strtok

功能

将某个字符串,按照指定的分隔符拆解为子串

所需头文件

#include

函数原型

char *strtok(char *str, const char *delim);

参数

str

指定要拆解的字符串

delim

分隔符,此处可以指定多个分隔符,形成一个分隔符串

返回值

成功

指向子串的指针

失败

NULL,代表拆解完毕

  • 注意:
  1. 该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 '\0' 。
  2. 由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。
  3. 首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替。
  • 示例:
char s[20] = "www.baidu.com";

char *p = strtok(s, ".");  // 首次调用时,s 指向需要分割的字符串
while(p != NULL)
{
    printf("%s\n", p);
    p = strtok(NULL, "."); // 此后每次调用,均使用 NULL 代替。
}

注:上述代码的运行结果就是将字符串 s 拆解为"www"、"yueqian"、"com" 和 "cn"

函数strcat与strncat

功能

将两个字符串拼接起来

所需头文件

#include

函数原型

char *strcat(char *dest, const char *src);

char *strncat(char *dest, const char *src, size_t n);

参数

dest

指向目标内存,最终存储拼接之后的字符串

src

指向需要拼接的字符串,最终将 src 拼接到 dest 的后面

n

规定最多将 src 中的 n 个字节拼接到 dest 的后面

返回值

返回一个指针,指向拼接后的字符串,等价于 dest

  • 注意:
  1. 这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
  2. strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
  3. strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 '\0' )到 dest 的末尾。
  • 示例:
char s1[10] = "abc";
strcat(s1, "xyz");
printf("%s\n", s1); // 输出 "abcxyz"

char s2[10] = "abc";
strcat(s3, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃

char s[10]  = "abc";
strncat(s, "123456789", sizeof(s)-strlen(s)-1);
printf("%s\n", s); // 输出 "abc123456",两个字符串被拼接到了一起,且不会溢出
  • 注意:strncat()是具备边界检查的安全版本,推荐使用。

函数strcpy与strncpy

功能

复制字符串

所需头文件

#include

函数原型

char *strcpy(char *dest, const char *src);

char *strncpy(char *dest, const char *src, size_t n);

参数

dest

指向目标内存,存储复制的字符串

src

指向待复制的字符串

n

规定最多将 src 中的 n 个字节拼接到 dest 的后面

返回值

返回一个指针,指向复制后的字符串,等价于 dest

  • 注意:
  1. 这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。
  2. strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
  3. strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 '\0' )到 dest 中。
  • 示例:
char s1[5] = "abc";
strcpy(s1, "xyz);
printf("%s\n", s1); // 输出 "xyz",原有的"abc"被覆盖

char s2[5] = "abc";
strcpy(s2, "123456789"); // 此处操作内存溢出,可能会发生内存崩溃

char s[5] = "abc";
strncpy(s, "123456789", sizeof(s)-1);
printf("%s\n", s); // 输出 "1234",有边界保护,不会溢出
  • 注意:strncpy()是具备边界检查的安全版本,推荐使用。

函数strcmp与strncmp

功能

比较两个字符串

所需头文件

#include

函数原型

int strcmp(const char *s1, const char *s2);

int strncmp(const char *s1, const char *s2, size_t n);

参数

s1

待比较的字符串

s2

待比较的字符串

n

比较字符串的前 n 个字节

返回值

当s1大于、等于或者小于s2时,返回1、0或者-1

  • 注意:
  1. 比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
  2. 从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。
  • 示例:
printf("%d\n", strcmp("abc", "abc")); // 输出0,两个字符串相等
printf("%d\n", strcmp("abc", "aBc")); // 输出1,"abc" 大于 "aBc"
printf("%d\n", strcmp("999", "aaa")); // 输出-1,"999" 小于 "aaa"

函数strchr与strrchr

功能

在指定的字符串内查找特定字符

所需头文件

#include

函数原型

char *strchr(const char *s, int c);

char *strrchr(const char *s, int c);

参数

s

指定字符串

c

待查字符

返回值

成功

返回指向找到的字符的指针

失败

NULL

  • 注意:
  1. 这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。
  2. strchr() 从左往右找,strrchr() 从右往左找。
  3. 字符串结束标记 '\0' 被认为是字符串的一部分。
  • 示例:
char *p;

p = strchr("www.qq.com", '.'); // 从左到右找到第一个出现的字符'.'
printf("%s\n", p);             // 输出 ".qq.com"

p = strrchr("www.qq.com", '.');// 从右到左找到第一个出现的字符'.'
printf("%s\n", p);             // 输出 ".com"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值