「C/C++ 01」C标准库中常见的字符串处理函数

目录

1、strlen()

2、strcpy()、strncpy()

3、strstr()

4、strcmp()、strncmp()

5、strcat()、strncat()(效率比 strcpy() 低)

6、strtok()

7、memset()


以下函数都在头文件#include<string.h>中

1、strlen()

strlen()函数和sizeof运算符 的区别:strlen()不算\0,sizeof()会算,一个是函数,一个是运算符。

2、strcpy()、strncpy()

#include <string.h>
 
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);

函数说明:

(1)strcpy()函数将src指向的字符串(包括终止的空字节('\0'))复制到dest指向的buffer中,字符串不能重叠,而且目标字符串dest必须足够大。

(2)strncpy()函数与strcpy()类似,不同之处是可以指定最多复制src的前n个字节(如果在src的前n个字节中没有null,则放在dest中的字符串不会以0结尾)。

3、strstr()

用来查找子串。找到了返回开头的指针,没找到则返回NULL。

#include <string.h>
 
char *strstr(const char *a, const char *b);

函数说明:

        strstr()函数在a指向的字符串中查找第一个出现的子字符串b。不比较终止字符Null字节('\0')。这些函数返回指向所定位子字符串开头的指针,如果没找到对应的子字符串,则返回NULL。

4、strcmp()、strncmp()

用来比较两个字符串,相同返回0,s1 > s2返回1,s1 < s2返回-1;

#include <string.h>
 
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);

函数说明:

(1)strcmp()用于比较两个字符串s1和s2。逐个字符去比较ASCII码,比较出大小时返回。一旦比较出不同,就会立即返回。返回值如下:

        如果s1指向的字符串 = s2指向的字符串  返回 0

        如果s1指向的字符串 > s2指向的字符串 返回 正数

        如果s1指向的字符串 < s2指向的字符串 返回 负数

(2)strncmp()比较s1和s2指向的字符串中的前n个字符,比较方法与strcmp()类似。

5、strcat()、strncat()(效率比 strcpy() 低)

尾插:将字符串s2尾插到s1的‘\0’处,结束再加上一个'\0'

#include <string.h>
 
char *strcat(char *s1, const char *s2);
char *strncat(char *s1, const char *s2, size_t n);

函数说明:

(1) strcat()函数将src字符串添加到dest字符串中,覆盖了在位置结束的空字节('\0')
dest的末尾,然后添加一个终止空字节。返回值是指向dest的指针。

(2)strncat()函数与strcat()函数类似,至少strncat()可以指定最多来自src的前n个字节。

6、strtok()

用来拆分字符串,建议自己写一个更好用。

#include <string.h>
 
char *strtok(char *str, const char *delim);

 函数说明:        

        strtok() 将字符串分解为零或多个非空标记的序列。str是要解析的字符串,在第一次调用strtok()时,必须要指定str。之后调用该函数想继续解析该字符串,str必须为NULL。

#include <stdio.h>
#include <string.h>
 
int main(int argc,char *argv[])
{
    char    *token;
    char    str[] = "hello-world-I-am-a-person-of-harding-to-learn-code";
 
    token = strtok(str,"-");
    while( NULL != token )
    {   
        printf("string:%s\n",token);
        token = strtok(NULL,"-");
    }
   
    return 0;
}

7、memset()

用来初始化指针指向的内存空间。

#include <string.h>
 
void *memset(void *s, int c, size_t n);

 常用的写法有三个:

memset(arr, 0, sizeof arr);
memset(arr, -1, sizeof arr);
memset(arr, 0x3f, sizeof arr);

 注意:

为地址s开始的n个字节赋值c,注意:是逐个字节赋值,str开始的n个字节中的每个字节都赋值为c。
(1) 若s指向char型地址,c可为任意字符值;
(2) 若s指向非char型,如int型地址,要想赋值正确,c的值只能是-1或0,因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

 为什么c的值只能是-1或0 呢?

        通过memset(a,100,sizeof a)给int类型的数组赋值,你给第一个字节的是一百,转成二进制就是0110 0100,而int有四个字节,也就是说,一个int被赋值为0110 0100,0110 0100,0110 0100,0110 0100,对应的十进制是1684300900,根本不是你想要赋的值100,这也就解释了为什么数组中的元素的值都为1684300900。
 


至于0x3f,这是编程竞赛中常用到的一个数值,0x3f3f3f3f约为10亿,差不多是int上限的一半,一般为编程竞赛中的最大值,在memset中使用0x3f,相当于把每四个字节即一个int数字初始化为0x3f3f3f3f。


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

相关推荐

  1. C/C++ 01C标准常见字符串处理函数

    2024-05-01 02:40:02       39 阅读
  2. [知识点]C 标准常用字符串处理函数

    2024-05-01 02:40:02       34 阅读
  3. C语言标准函数

    2024-05-01 02:40:02       27 阅读
  4. 探索C语言标准qsort函数

    2024-05-01 02:40:02       54 阅读
  5. Python 标准常用模块

    2024-05-01 02:40:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 02:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 02:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 02:40:02       87 阅读
  4. Python语言-面向对象

    2024-05-01 02:40:02       96 阅读

热门阅读

  1. Linux下网络编程-基于多任务的简易并发服务器

    2024-05-01 02:40:02       34 阅读
  2. 影响 Makefile 中变量值的方式

    2024-05-01 02:40:02       33 阅读
  3. Modbus仪器仪表转PROFINET协议

    2024-05-01 02:40:02       31 阅读
  4. IPD流程需要适配ABCC时代

    2024-05-01 02:40:02       36 阅读
  5. Android OTG U盘无法显示在系统文件管理的修改

    2024-05-01 02:40:02       37 阅读
  6. C#逻辑运算符

    2024-05-01 02:40:02       25 阅读
  7. Python基础学习之try

    2024-05-01 02:40:02       37 阅读
  8. github中fasttext库README官文文档翻译

    2024-05-01 02:40:02       27 阅读