博客
关于我
C字符串高级
阅读量:583 次
发布时间:2019-03-11

本文共 2954 字,大约阅读时间需要 9 分钟。

C语言字符串和字符数组

字符串和字符数组的概念

在C语言中,字符串和字符数组的概念经常会被混淆,但它们实际上有着明显的区别。

  • 字符串:在C语言中,字符串是以null terminator('\0')结尾的字符数组。数组中的每个元素存储一个字符,数组元素类型为char
  • 字符数组:字符数组是用来存放字符的数组,数组中每个元素存放一个字符。

字符串初始化方式

字符数组可以通过两种方式初始化:

  • 字符逐个初始化
  • char array[] = { 'a', 'b', 'c', 'd', '\0' };
    • 数组长度为4(计算到null terminator前),实际占用5字节。
    • 由于null terminator的存在,字符串的实际长度为4。
    • 如果null terminator位于数组中间,后续字符将被忽略。
    1. 字符串常量初始化
    2. char array[] = "C program";

      -编译器会在字符串末尾自动添加null terminator。-字符串存放在数据段的常量区,无法进行写改操作。-局部变量存放在栈区,静态变量或全局变量存放在数据段。

      字符数组的输入输出

    3. 逐个输入输出
    4. char a[10];scanf("%s", a);
      1. 整体输入输出
      2. char a[] = "hello";printf("%s\n", a);

        指向字符串的指针

        在C语言中,可以用指针来指向字符串:

      3. 字符串常量指针
      4. char *ptr = "C Language";
        • 存储在数据段,不能修改。
        1. 数组指针
        2. char array[] = "hello";char *ptr = array; // ptr指向栈区中的字符串

          字符串和字符数组示例

          #include 
          #include
          int main() { char local_array[5]; // 此处不初始化,值为随机 char array1[] = { 'h', 'e', 'l', '\0', 'l', 'o', '\0' }; char array2[] = "hello"; char array3[] = "hello"; char array4[5] = "hello"; char array5[6] = "hello"; printf("array1: %s size: %d length: %d\n", array1, sizeof(array1), strlen(array1)); printf("array2: %s size: %d length: %d\n", array2, sizeof(array2), strlen(array2)); printf("array3: %s size: %d length: %d\n", array3, sizeof(array3), strlen(array3)); printf("array4: %s size: %d length: %d\n", array4, sizeof(array4), strlen(array4)); printf("array5: %s size: %d length: %d\n", array5, sizeof(array5), strlen(array5));}

          输出示例

          array1: hel size: 7 length: 3array2: hello size: 6 length: 5array3: hello size: 6 length: 5array4: hellohallo size: 5 length: 5array5: hello size: 6 length: 5

          字符串函数

          C语言提供了丰富的字符串处理函数,主要包括以下几类:

          • 输入输出函数

            • puts(char *strPtr): 将字符串输出到标准输出。
            • gets(char *strPtr): 从标准输入读取字符串。
          • 字符串长度函数

            int strlen(char const *strPtr);
          • 字符串拷贝函数

            char *strcpy(char *des, char *src);char *strncpy(char *des, char const *src, int size);
          • 字符串连接函数

            char *strcat(char *str1, char const *str2);char *strncat(char *str1, char const *str2, int size);
          • 字符串比较函数

            int strcmp(char const *str1, char const *str2);int strncmp(char const *str1, char const *str2, int size);
          • 字符串分隔函数

            char *strtok(char *str, char const *delimiters);
          • 字符串子串截取函数

            char *strstr(char *s1, char const *s2);

          C标准库函数

          • 标准算术和随机数函数

            int abs(int value);long labs(long value);rand(void); // 生成伪随机数srand(unsigned int seed); // 设置随机数种子
          • 数学函数

            double sin(double angle);int pow(double x, double y); // 指数函数
          • 时间日期函数

            time_t time(time_t *date_time);char *ctime(const time_t clock); // 时间转换为字符数组

          案例:输入语句单词平均长度计算

          #include 
          #include
          int main() { char sentence[30] = {'\0'}; // 初始化为空字符串 printf("请输入一句话:"); fgets(sentence, sizeof(sentence), stdin); int total = strlen(sentence); int words = 0; int i; for (i = 0; i < total; ++i) { if (sentence[i] == ' ' && i != 0) { ++words; // 单词分隔判定 } } if (words == 0) { printf("请提供多于一个单词的输入\n"); return 0; } printf("平均单词长度:%.1f\n", (float)total / words); return 0;}

    转载地址:http://mqqtz.baihongyu.com/

    你可能感兴趣的文章
    微信JS-SDK DEMO页面和示例代码
    查看>>
    Chrome查找发请求的js之黑箱调试
    查看>>
    CMCC登录参数分析
    查看>>
    GridView的另外一种分页方式,可提高加载速度
    查看>>
    GridView自定义删除操作
    查看>>
    一张图搞定RPC框架核心原理
    查看>>
    Scala中的包
    查看>>
    参加阿里的Java面试经验
    查看>>
    Python微信公众号
    查看>>
    他来了他来了,他带着云栖大会的免费门票走来了
    查看>>
    获取linux 主机cpu类型
    查看>>
    限流的算法有哪些?
    查看>>
    Android Studio updating indices 一直刷新和闪烁
    查看>>
    个人购买服务器问题?
    查看>>
    pwntools编写技巧
    查看>>
    How2Heap笔记(三)
    查看>>
    go--microSocket服务端 php客户端
    查看>>
    小程序提交新数据后如何返回上一页并刷新数据?
    查看>>
    qt c++实现的ai贪吃蛇吃满屏幕,超详细!(二)ai的具体实现
    查看>>
    linux 查看log日志相关命令
    查看>>