C语言基础学习笔记(10):字符串

C语言基础学习笔记(10):字符串

图: 第一张黑洞照片(The first image of a black hole published in April 2019)

​ by 事件视野望远镜(Event Horizon Telescope)

Guderian出品

  1. C语言中没有专门的字符串数据类型。在定义字符串,字符数组的长度应比字符串长度多1,给\0留个位置:

    1
    2
    #define STR_LEN 80
    char str[STR_LEN+1];
  2. C语言常用字符串处理操作函数:#include <string.h>

    (1)strlen(s);返回字符串s的长度

    (2)strcpy(s1,s2);复制s2s1,返回s1的指针

    (3)strcat(s1,s2);复制s2接在s1末尾,返回s1的指针

    (4)strcmp(s1,s2);比较s2s1的大小,返回0表示相等,返回值大于零表示s1s2大,返回值小于零表示s1s2小。(比较规则:当出现第一对不相等的字符时,由这两个字符决定所在字符串的大小,返回其ASCII码比较的差值。)

    (5)strncpy(s1,s2,n);复制s2前面最多n个元素至s1中,比strcpy()更安全

    (6)strncat(s1,s2,n);复制s2前面最多n个元素至s1末尾,比strcat()更安全

    (7)strncmp(s1,s2,n);比较s2s1前面最多n个元素的大小

  3. 向函数传递字符串的两种方法:

    (1)用字符数组作函数参数

    (2)用字符指针作函数参数

  4. 字符数组作函数参数示例:计算实际字符个数

    1
    2
    3
    4
    5
    6
    7
    8
    unsigned int MyStrlen(const char str[]) //防止原字符数组被修改
    {
    int i;
    unsigned int len = 0;
    for (i=0; str[i]!='\0'; i++)
    len++;
    return len;
    }
  5. 字符指针作函数参数示例:计算实际字符个数

    1
    2
    3
    4
    5
    6
    7
    unsigned int MyStrlen(const har *pstr) //防止原字符数组被修改
    {
    unsigned int len = 0;
    for (; *pstr!='\0'; pstr++)
    len++;
    return len;
    }
  6. 字符指针作函数参数示例:计算实际字符个数(Optimized versoin

    1
    2
    3
    4
    5
    6
    7
    unsigned int MyStrlen(const char *pstr) //防止原字符数组被修改
    {
    const char *start = pstr;
    while (*pstr)
    pstr++;
    return pstr-start;
    }
  7. 字符数组作函数参数示例:复制字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void MyStrcpy(char dst[], char src[])
    {
    int i = 0;
    while (src[i]!='\0')
    {
    dst[i] = src[i];
    i++;
    }
    dst[i] = '\0';
    }
  8. 字符指针作函数参数示例:复制字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void MyStrcpy(char *dst, char *src)
    {
    while (*src!='\0')
    {
    *dst = *src;
    src++;
    dst++
    }
    *dst = '\0';
    }
  9. 字符指针作函数参数示例:复制字符串(Insane versoin!!!

    1
    2
    3
    4
    void MyStrcpy(char *dst, const char *src)
    {
    while (*dst++ = *src++); //空字符被赋值之后循环才结束
    }
  10. 不要写没人能看懂的代码!第6点、第9点和第12点的代码风格仅供欣赏!DO NOT TRY IT AT HOME!

  11. 从函数返回字符指针,如strcpy()strcat()的函数原型:

    strcpy()char *strcpy(char *dstStr, const char *srcStr);

    strcat()char *strcat(char *dstStr, const char *srcStr);

  12. 编程实现strcat()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>

    char *MyStrcat(char *dst, char *src);

    int main()
    {
    char s1[10] = {"123"};
    char s2[] = "45";
    char *res = NULL;
    res = MyStrcat(s1,s2);
    printf("%s",res);
    return 0;
    }

    char *MyStrcat(char *dst, char *src)
    {
    char *pstr = dst;
    while (*dst!='\0') dst++;
    while (*dst++ = *src++);
    return pstr;
    }

【更多C语言系列】

本文标题:C语言基础学习笔记(10):字符串

文章作者:G-SS-Hacker

发布时间:2020年02月22日 - 09:02:34

最后更新:2020年06月20日 - 10:49:58

原始链接:https://G-SS-Hacker.github.io/C语言基础学习笔记(10):字符串/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。