• 25-字符串


    字符串是位于双引号中的字符序列

    在内存中以""结束,所占字节比实际多一个 

    注意:

    (1)可以把一个字符常量赋给一个字符变量,但不能把字符串常量赋给字符变量

    (2)C语言中没有字符串变量,可以用字符数组来存放字符串

    1、字符数组的概念 

      用来存放字符的数组称为字符数组。

    2、字符数组定义

      形式和前边介绍的数值数组相同

      char 数组名[常量表达式]

          例如:char ch[5];

      字符数组也可以是二维或多维数组。

      char 数组名[常量表达式1][常量表达式2];

      例如:char ch[2][5]; 即为二维字符数组。

    注意:定义字符数组时,应确保数组长度比字符串长度至少多1

    3、字符数组初始化

    字符数组也允许在定义时作初始化赋值

    char ch[4] = {'a', ' ', 'o'}; 赋值后各元素的值为:

    ch[0] = 'a';

    ch[1] = ' ';

    ch[1] = 'o';

    其中ch[3]未赋值,系统自动赋值为0。

    当对全体元素赋初值的时候也可以省去长度说明。例如:

      char ch[] = {'f', 'A', ' '};

    这时数组长度自动定为3。

    注意:未被使用的元素均被自动初始化为0 

    4、字符数组的引用

      字符数组和普通数组一样,也是通过下标引用。

    5、字符串和字符串结束标志

      在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。

      字符串总是以''作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符''存入数组,并以此作为该字符串是否结束的标志。有了''标志后,就不必再用字符数组的长度来判断字符串的长度了。 

     1 #include <stdio.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5     //这种初始化方式后面必须加上'',否则会出现乱码或我们不想要的内容
     6     char ch[] = {'i', 't', 'c', 'a', 's', 't', ''};
     7     printf("%s
    ", ch);
     8     int len = sizeof(ch)/sizeof(char);
     9     printf("数组长度为%d
    ", len);
    10     return 0;
    11 }

       C语言允许用字符串的方式对数组作初始化赋值。例如: char c[]={'c', ' ','p','r','o','g','r','a','m', ''}; 

      可写为: char c[] = {"c program"};  或去掉{}写为: char c[] = "c program";

      用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志''。上面 的数组c在内存中的实际存放情况为: 

    ''是由C编译系统自动加上的。由于采用了''标志,所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 

    7、字符数组的输入输出

    (1)字符串的输出

      在采用字符串方式后,字符数组的输入输出将变得简单方便。

      除了上述用字符串赋初值的办法 外,还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。 

    注意在本例的printf函数中,使用的格式字符串为"%s",表示输出的是一个字符串。而在输出表列中给出数组名则可。

    不能写为:printf("%s",c[]); 

    思考&实现1:

    使用 scanf() 从控制台输入一个字符串,然后使用 printf() 将其输出。 

    数组长度为100,因此输入的字符串长度必须小于100,以留出一个字节用于存放字符串结束标志 ''。 

    值得注意的是,对于字符数组,如果不作初始化赋值,则必须说明数组长度。还应该特别注意的是,当用scanf、函数输入字符串时,字符串中不能有空格,否则将以空格作为字符串的结束符。

    从输出结果可以看出空格以后的字符都未能输出。为了避免这种情况,可多设几个字符数组分段存放含空格的串。程序可改写如下:
     1 #include <stdio.h>
     2 
     3 int main(int argc, const char * argv[])
     4 {
     5     char str1[10], str2[10], str3[10], str4[10];
     6     printf("请输入字符串:
    ");
     7     scanf("%s%s%s%s", str1, str2, str3, str4);
     8     printf("你输入的字符串为:%s%s%s%s
    ", str1, str2, str3, str4);
     9     return 0;
    10 }

    这是由于在C语言中规定,数组名就代表了该数组的首地址。整个数组是以首地址开头的一块 连续的内存单元。 

    设数组c的首地址为0xffc0,也就是说ch[0]单元地址为oxffc0。则数组名c就代表这个首地址。

    因此在ch前面不能再加地址运算符&。如写作scanf("%s",&ch);则是错误的。

    在执行函数printf("% s",ch) 时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志''为止。 

    8、计算字符串长度

    (1)使用字符串处理函数 strlen

    注意:使用 strlen 计算字符串长度时,不包含''

    (2) 使用自定义方法,以''作为字符串结束条件,进行遍历统计

    9、字符数组和普通数组的区别

    实际上,字符数组和普通数组没什么本质区别。

    注意的是:数组类型的含义:数组类型指的是数组所包含的元素的的类型,而不是数组名的类型,数组名是一个指针,指向数组第一个元素的地址,即数组的首地址。

    字符数组的每个元素都是char类型,整型数组的每个元素都是int类型。

    scanf() 和 printf() 函数有一种格式化字符串 %s 可以用来整体输入输出字符数组,但是没 有特定的格式支持 int 数组整体数组输出。 

    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    类图的基本知识
    设计模式——单例模式
    解决phpcms V9 推荐位无法排序
    PHPCMS 多站点管理切换问题
    天天团购系统-简单的目录结构
    php的时间输出格式
    天天团购--源码目录结构
    天天团购系统--部分模板语法
    PHP json数据格式化方法
    PHP json_encode中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/4003882.html
Copyright © 2020-2023  润新知