C字符串高级
发布日期:2021-05-14 23:42:27 浏览次数:8 分类:精选文章

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

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: 3
          array2: hello size: 6 length: 5
          array3: hello size: 6 length: 5
          array4: hellohallo size: 5 length: 5
          array5: 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;
          }
    上一篇:2010-03-25 函数题
    下一篇:C语言基础条件和循环

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月24日 13时05分08秒