zoukankan      html  css  js  c++  java
  • C语言学习笔记-字符串

    • 字符串初始化
    • 访问字符串
    • 字符串的拷贝

    字符串初始化

    C 语言没有字符串类型,利用字符类型来模拟,以 结尾。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    int main()
    {
        // 如果用字符数组来初始化字符串,末尾不是结尾后面的会乱码
        char buf[] = {'a', 'b', 'c'};
        printf("buf = %s
    ", buf);
        // 指定数组长度未初始化的地方会补零,读到0就作为字符串结束标记,则不会乱码
        char buf1[100] = {'a', 'b', 'c'};
        printf("buf1 = %s
    ", buf1);
        // '字符 0' ≠ 0 = ''
        char buf2[100] = {'a', 'b', 'c', '0', '1', '2'};
        printf("buf2 = %s
    ", buf2);
        char buf3[100] = {'a', 'b', 'c', 0, '1', '2'};
        printf("buf3 = %s
    ", buf3);
        char buf4[100] = {'a', 'b', 'c', '', '1', '2'};
        printf("buf4 = %s
    ", buf4);
        // 常用初始化字符串的方法
        char str[] = "safafasga";
        // strlen() 和 sizeof() 的区别:
        // 字符串末尾以结尾,strlen() 计算字符串长短; sizeof()计算大小还会包含
        printf("strlen() = %d, sizeof() = %d
    ", strlen(str), sizeof(str));
        char str2[100] = "safafasga";
        // 制定数组大小的情况下,未制定的位置将会自动补零
        printf("strlen() = %d, sizeof() = %d
    ", strlen(str2), sizeof(str2));
        return 0;
    }
    

    访问字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    #include <stdio.h>
    #include <string.h>
    /**
    * 遍历字符串的方法
    **/
    int main()
    {
        char *buf = "fdsafasdgag";
        for(int i = 0; i < strlen(buf); ++i)
        {
            printf("%c", buf[i]);
        }
        printf("
    ");
        char *p = buf;
        for(int i = 0; i < strlen(buf); i++)
        {
            printf("%c", p[i]);
        }
        printf("
    ");
        for(int i = 0; i < strlen(buf); i++)
        {
            printf("%c", *(p + i));
        }
        printf("
    ");
        for(int i = 0; i < strlen(buf); i++)
        {
            printf("%c", *(buf + i));
        }
        printf("
    ");
        // p 和 buf 等价么
        // buf 是常量,常量是不可变的
        // p 是变量,可变
        // p++;
        // buf++; // err
        return 0;
    }
    

    字符串的拷贝

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    #include <stdio.h>
    #include <string.h>
    /**
    * 1. 进行非空判断,避免异常
    * 2. 不要直接使用形参
    **/
    int my_strcpy(char *dst, char *src)
    {
        // 非空判断
        if(dst == NULL || src == NULL)
            return -1;
        // 不要直接使用形参
        // 会改变数组的首地址位置
        char *to = dst;
        char *from = src;
        while(*to++ == *from++);
        
        // 上面把形参结果来不起作用,只有这样才行,之后再看一下
        // while(*dst++ == *src++);
        return 0;
    }
    /**
    * 1. 实现字符串拷贝函数
    * 2. 写出健壮的代码的注意事项
    **/
    int main()
    {
        char *src = "dfagfadga";
        char dst[100] = {0};
        int res = my_strcpy(dst, src);
        if(res != 0)
        {
            fprintf(stderr,"copy str error.");
            return -1;
        }
        printf("dst: %s
    ", dst);
        return 0;
    }
    
  • 相关阅读:
    JS中document对象和window对象有什么区别
    jQuery parent.append和$after的区别
    使用CFURLCreateStringByAddingPercentEscapes进行URL编码
    JQuery中==与===、$("#")与$("")的区别
    理解JavaScript中的arguments,callee,caller,apply
    使用自己的ClassLoader实现热替换
    TextBox 英文文档
    easyui的textbox和validatebox的 赋值区别
    jquery的$.extend、$.fn.extend、 jQuery.extend( target, object1, [objectN])作用及区别
    jQuery 遍历
  • 原文地址:https://www.cnblogs.com/shuiyj/p/13185156.html
Copyright © 2011-2022 走看看