C语言--12字符串处理函数

函数strstr

函数strchr与strrchr

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

函数strlen

  • 示例:

char *s = "helloworld"; printf("helloworld的长度是:%d\n", strlen(s));

函数strcat与strncat

  • 注意:
    1. 这两个函数的功能,都是将 src 中的字符串,复制拼接到 dest 的末尾。
    2. strcat() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
    3. strncat() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 的末尾。

函数strtok

  • 注意:
    1. 该函数会将改变原始字符串 str,使其所包含的所有分隔符变成结束标记 ‘\0’ 。
    2. 由于该函数需要更改字符串 str,因此 str 指向的内存必须是可写的。
    3. 首次调用时 str 指向原始字符串,此后每次调用 str 用 NULL 代替。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,orange,grape";
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ","); // 继续分割
}
return 0;
}
/*
在上面的例子中,我们首先使用strtok函数将字符串str按照逗号分隔成多个子字符串,
然后使用while循环遍历每个子字符串,直到没有更多的子字符串为止。每次调用
strtok(NULL, ",")会继续从上一次分割的位置开始,直到分割完整个字符串。
*/

函数strcpy与strncpy

  • 注意:
    1. 这两个函数的功能,都是将 src 中的字符串,复制到 dest 中。
    2. strcpy() 没有边界控制,因此可能会由于 src 的过长而导致内存溢出。
    3. strncpy() 有边界控制,最多复制 n+1 个字符(其中最后一个是 ‘\0’ )到 dest 中。
    4. strcyp 函数的结束条件只有一个:遇到src中的结束符,因此有可能由于src过大导致异常退出
    5. strncpy 函数的结束条件有两个: 遇到src中的结束符 + 达到指定的大小N

函数strcmp与strncmp

  • 注意:
    • 比较字符串大小,实际上比较的是字符的 ASCII码值的大小。
    • 从左到右逐个比较两个字符串的每一个字符,当能“决出胜负”时立刻停止比较。
      • 返回值是第一个差异字符的差值
    • 结束条件:
      • strcmp 函数只有两个结束条件: 遇到结束符 + 遇到有差值
      • strncmp 函数只有三个结束条件: 遇到结束符 + 遇到有差值 + 达到n个字符

内存拷贝函数 memcpy

#include <string.h>

void *memcpy(void *dest, const void *src, size_t n);
    参数分析:
        dest --> 拷贝到的目标地址
        src --> 需要拷贝的原始数据
        n --> 期望拷贝的字节数
    返回值:
        返回目标地址 dest 

该函数的结束条件只有一个,就是拷贝的字节数达到了用于的期望值 N 。内存中尽管全部都是结束符也会把这些结束符一一拷贝。

示例:

char msg [128] = "Hello Even Jacy GZ2407";
msg [5] = 0 ;  // 手动在Hello 后面添加了 结束符 \0

char * map1 = calloc(1,128);
char * map2 = calloc(1,128);

strncpy(map1 , msg ,  128 ); // 当遇到Hello 后面的结束符会停止工作
memcpy (map2 , msg , 128 ); // 会一直拷贝直到拷贝了128字节为止

printf("map1:%s %s \n" , map1 , map1 +6 );
printf("map2:%s %s\n" , map2 , map2 +6);

free(map1);
free(map2);

内存数据比较 memcmp

#include <string.h>

int memcmp(const void *s1, const void *s2, size_t n);
    参数分析:
        s1 --> 需要比较的地址1   
        s2 --> 需要比较的地址2     
        n --> 期望比较的字节数
    返回值:
        返回两个内存间数据的差值(按字节比较)
        如果完全匹配则返回 差值0 
        如果不匹配则返回第一个差异点的差值 非零

该函数的结束条件只有一个,就是比较的字节数达到了用于的期望值 N 。内存中尽管全部都是结束符也会把这些结束符一一比较。它与strcmp的区别是strcmp 函数在遇到第一个结束符后会停止比较,后面的数据它无法比较。

总结:

所有的str开头的函数比如strstr \ strcpy \ strcmp.. 这些函数都会在遇到结束符时停止工作,因此在某些场合无法使用str进行某些操作,可以考虑mem开头的函数 比如 memcpy \ memcmp 。。。。

membarrier    memchr        memcpy        memfrob       memmove       memrchr       memusage
memalign      memccpy       memcmp        memfd_create  memmem        mempcpy       memset        
memusagestat

C库函数 - atoi()

 C 标准库 - 

描述

C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为int 型)。

声明

下面是 atoi()函数的声明。

int atoi(const char *str)

参数

  • str -- 要转换为整数的字符串。

返回值

该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

实例

下面的实例演示了 atoi()函数的用法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int val;
    char str[20];
    strcpy(str, "98993489");
    val = atoi(str);
    printf("字符串值= %s, 整型值 = %d\n", str, val);
    strcpy(str, "runoob.com");
    val = atoi(str);
    printf("字符串值= %s, 整型值 = %d\n", str, val);
    return (0);
}

让我们编译并运行上面的程序,这将产生以下结果:

字符串值 = 98993489, 整型值 = 98993489字符串值 = runoob.com, 整型值 = 0

结语:

        在本文中,我们深入探讨了C语言中的字符串处理函数及其重要性。从基本的字符串操作函数如 strlenstrcpystrcat 到更复杂的字符串搜索和比较函数,每个函数在处理字符数据时都扮演着不可或缺的角色。掌握这些函数不仅有助于我们提高编程的效率和可读性,还能让我们更好地理解内存管理和数据处理的底层机制。

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值