黑马程序员 ——ios基础 ——字符串
2015-10-15 16:37
274 查看
1、概念:字符是单引号括起来的单个字符,如'a' 'b' 'c' 等,咱们C语言中除了能使用字符常量以外,还可以使用字符串常量。 字符串是位于双引号中的字符序列,如下是合法的字 符串常量:
如 “how do you do ” , "CHINA", "a", "$213123" 可以输出。不能把字符常量跟字符串常量混淆。
'a' 是 字符常量 “a” 是 字符串常量
在内存中以“\0”结束,所占字节比实际多一个。 \0是一个ASCII码为0的字符。从ASCII代码表中可以看到ASCII码为0的字符是空房操作符。 它不引起任何控制动作,也不是一个可显示的字符。
C语言并没有专门的字符串变量,如果想将一个字符串存放在变量中保存,必须是字符数组。 即用一个字符型数组存放一个字符串,数组中每一个元素存放一个字符。char ch1[6] ="hello”;
2、字符数组定义
形式与前面介绍的数值数组相同。
char 数组名[常量表达式]
例如:char c[10]; 因为字符型与整型是互通的,因此可以定义一个整型数组,用它来存放字符数据。
char 数组名[常量表达式1][常量表达式2]
例如:char c[5][10]; 即为二维字符数组。
注意:定义字符数组时,应确保数组长度比字符串长度至少多1
3、字符数组初始化
1) 定义的同时进行初始化
第一种初始化方法:
字符数组也允许在定义时作初始化赋值。例如:
char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 赋值后各元素的值为:
c[0]的值为‘c’
c[1]的值为‘ ’
c[2]的值为‘p’
c[3]的值为‘r’
c[4]的值为‘0’
c[5]的值为‘g’
c[6]的值为‘r’
c[7]的值为‘a’
c[8]的值为‘m’ 当对全体元素赋初值时也可以省去长度说明。例如:
char c[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' };
这时C数组的长度自动定为9。
第二种初始化方法:
char c4[10]={"abc"}
//定义了一个字符串数组c4 长度是10,初始化4个字符
'a'->c4[0];
'b'->c4[1];
'c'->c4[2];
'\0'->c4[3]; //c4存储了一个字符串
第三种初始化方法:
2) 先定义再初始化: char c7[3];
c7[0] = 'a';
c7[1] = 'b';
c7[2] = 'c';
注意:未被使用的元素均被自动初始化为\0
4、字符数组引用和遍历
字符数组和普通数组一样,也是通过下标引用。
部分初始化
字符串的输出
使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
%s 从给定的地址开始,输出字符直到遇到\0结束
注意在本例的printf函数中使用的%s,输出表列中给出数组名则可。不能写为:printf("% s",c[]);
字符串的输入 char ch[10];
数组长度为100,因此输入的字符串长度必须小于100,以留出一个字节用于存放字符串结束 标志`\0`。
从输出结果可以看出空格以后的字符都未能输入。
为了避免这种情况,可多设几个字符数组分段 存放含空格的串。程序可改写如下:
字符串结束符
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。 前面介绍字符串常量时,已说明字符串总是以'\0'作为串的结束符。因此当把一个字符串存入 一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。
有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
Char ch[10]="abc" //字符数组长度 10 //字符串长度 4
//可见的字符串的长度 3
不使用或者不当使用结束符造成的问题 1)字符数组初始化时没有使用 '\0'
直接遇到\0为止
4属于部分初始化 未初始化的默认补\0
可写为:
char c[]={"C program"}; 或去掉{}写为:
char c[]="C program";
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。上面的 数组c在内存中的实际存放情况为:
‘\0'是由C编译系统自动加上的。由于采用了‘\0'标志,所以在用字符串赋初值时一般无须指 定 数组的长度, 而由系统自行处理。
2)不当的使用 '\0'
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0’。
字符串长度计算
因为字符串在内存中是逐个字符存储的,一个字符占用一个字节,所以字符串的长度也是占用的 内存单元的字节数。
1、使用字符串处理函数
2、以“\0”为字符串结束条件进行统计。 1)不知道数组长度的时候,计算字符串的长度
2)已知数组长度,但是不知道数组中实际存放了多少个字符
for实现(2)
字符串处理函数
1、字符串输出函数 puts 格式: puts(字符数组地址)
功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串
注意:
1)puts函数可以自动换行吗? 可以 2)也可以不是数组的首地址,可以是元素的地址 3)必须是字符数组
4) 不可以格式化输出
2、字符串输入函数 gets 格式: gets (字符数组名)
功能:从标准输入设备键盘上输入一个字符串。
注意:
1)warning: this program uses gets(), which is unsafe. 2)不安全:数组长度是100,但是如果你输入了120个字符,存在越界问题
3)使用gets可以接收空格
warning: this program uses gets(), which is unsafe.
使用gets()时会给出警告, 示不安全(也就是输入的字符串大于数组的容量时字符串就溢出到 其他存储空间了。) gets()函数接收的输入大小不受限制,于是有人利用这个,通过输入覆盖操 作系统所占的内存, 制造了蠕虫病毒。如果是重要的程序,最好谨慎使用这个函数。
3、字符串连接函数 strcat
格式: strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0”。
本函数返回值是字符数组1的首地址。
注意:
0)strcat 函数介绍,使用该函数必须要引入头文件
1)格式:strcat(oldStr,newStr);
2) oldStr的长度要足够到,只要能够保存下oldStr+newStr
3) newStr 把oldStr的最后一个字符\0给覆盖了
如 “how do you do ” , "CHINA", "a", "$213123" 可以输出。不能把字符常量跟字符串常量混淆。
'a' 是 字符常量 “a” 是 字符串常量
在内存中以“\0”结束,所占字节比实际多一个。 \0是一个ASCII码为0的字符。从ASCII代码表中可以看到ASCII码为0的字符是空房操作符。 它不引起任何控制动作,也不是一个可显示的字符。
可以把字符常量赋值给字符变量,但是不能把字符串常量赋值给字符变量。
C语言并没有专门的字符串变量,如果想将一个字符串存放在变量中保存,必须是字符数组。 即用一个字符型数组存放一个字符串,数组中每一个元素存放一个字符。char ch1[6] ="hello”;
2、字符数组定义
形式与前面介绍的数值数组相同。
char 数组名[常量表达式]
例如:char c[10]; 因为字符型与整型是互通的,因此可以定义一个整型数组,用它来存放字符数据。
字符数组也可以是二维或多维数组。
char 数组名[常量表达式1][常量表达式2]
例如:char c[5][10]; 即为二维字符数组。
注意:定义字符数组时,应确保数组长度比字符串长度至少多1
3、字符数组初始化
1) 定义的同时进行初始化
第一种初始化方法:
字符数组也允许在定义时作初始化赋值。例如:
char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 赋值后各元素的值为:
c[0]的值为‘c’
c[1]的值为‘ ’
c[2]的值为‘p’
c[3]的值为‘r’
c[4]的值为‘0’
c[5]的值为‘g’
c[6]的值为‘r’
c[7]的值为‘a’
c[8]的值为‘m’ 当对全体元素赋初值时也可以省去长度说明。例如:
char c[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' };
这时C数组的长度自动定为9。
第二种初始化方法:
char c4[10]={"abc"}
//定义了一个字符串数组c4 长度是10,初始化4个字符
'a'->c4[0];
'b'->c4[1];
'c'->c4[2];
'\0'->c4[3]; //c4存储了一个字符串
第三种初始化方法:
char c5[5]="ab"; char c6[]="afdsafas";
2) 先定义再初始化: char c7[3];
c7[0] = 'a';
c7[1] = 'b';
c7[2] = 'c';
注意:未被使用的元素均被自动初始化为\0
4、字符数组引用和遍历
字符数组和普通数组一样,也是通过下标引用。
部分初始化
字符串的输出
使用的格式字符串为“%s”,表示输入、输出的是一个字符串。
%s 从给定的地址开始,输出字符直到遇到\0结束
注意在本例的printf函数中使用的%s,输出表列中给出数组名则可。不能写为:printf("% s",c[]);
字符串的输入 char ch[10];
scanf("%s",ch);
数组长度为100,因此输入的字符串长度必须小于100,以留出一个字节用于存放字符串结束 标志`\0`。
从输出结果可以看出空格以后的字符都未能输入。
为了避免这种情况,可多设几个字符数组分段 存放含空格的串。程序可改写如下:
字符串结束符
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。 前面介绍字符串常量时,已说明字符串总是以'\0'作为串的结束符。因此当把一个字符串存入 一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。
有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
Char ch[10]="abc" //字符数组长度 10 //字符串长度 4
//可见的字符串的长度 3
不使用或者不当使用结束符造成的问题 1)字符数组初始化时没有使用 '\0'
直接遇到\0为止
4属于部分初始化 未初始化的默认补\0
可写为:
char c[]={"C program"}; 或去掉{}写为:
char c[]="C program";
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。上面的 数组c在内存中的实际存放情况为:
‘\0'是由C编译系统自动加上的。由于采用了‘\0'标志,所以在用字符串赋初值时一般无须指 定 数组的长度, 而由系统自行处理。
2)不当的使用 '\0'
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0’。
字符串长度计算
因为字符串在内存中是逐个字符存储的,一个字符占用一个字节,所以字符串的长度也是占用的 内存单元的字节数。
1、使用字符串处理函数
2、以“\0”为字符串结束条件进行统计。 1)不知道数组长度的时候,计算字符串的长度
2)已知数组长度,但是不知道数组中实际存放了多少个字符
for实现(2)
字符串处理函数
1、字符串输出函数 puts 格式: puts(字符数组地址)
功能:把字符数组中的字符串输出到显示器。 即在屏幕上显示该字符串
注意:
1)puts函数可以自动换行吗? 可以 2)也可以不是数组的首地址,可以是元素的地址 3)必须是字符数组
4) 不可以格式化输出
2、字符串输入函数 gets 格式: gets (字符数组名)
功能:从标准输入设备键盘上输入一个字符串。
注意:
1)warning: this program uses gets(), which is unsafe. 2)不安全:数组长度是100,但是如果你输入了120个字符,存在越界问题
3)使用gets可以接收空格
warning: this program uses gets(), which is unsafe.
使用gets()时会给出警告, 示不安全(也就是输入的字符串大于数组的容量时字符串就溢出到 其他存储空间了。) gets()函数接收的输入大小不受限制,于是有人利用这个,通过输入覆盖操 作系统所占的内存, 制造了蠕虫病毒。如果是重要的程序,最好谨慎使用这个函数。
3、字符串连接函数 strcat
格式: strcat(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1 中字符串的后面,并删去字符串1后的串标志 “\0”。
本函数返回值是字符数组1的首地址。
注意:
0)strcat 函数介绍,使用该函数必须要引入头文件
1)格式:strcat(oldStr,newStr);
2) oldStr的长度要足够到,只要能够保存下oldStr+newStr
3) newStr 把oldStr的最后一个字符\0给覆盖了
相关文章推荐
- 黑马程序员 ——ios基础 ——冒泡排序、二维数组
- 黑马程序员 ——ios基础 ——#include文件搜索顺序、数组
- 黑马程序员 ——ios基础 ——函数
- 黑马程序员 ——ios基础 ——程序的流程控制
- 黑马程序员 ——ios基础 ——关键字、标示符、运算符
- 黑马程序员 ——ios基础 ——程序和数据储存、数据类型、printf函数
- 黑马程序员 ——ios基础 ——第一个C程序、常量、变量
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- 【July程序员编程艺术】之寻找和为定值的两个或者多个数
- 我是怎么招聘程序员的
- 转自“展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告”
- 程序员重装系统后,要安装的工具
- 野生程序员的故事
- 黑马程序员——Java基础语法---数组
- 【扣丁学堂】程序员的另类幽默
- 黑马程序员——正则及API的使用
- 一个初入程序员白丁的感受
- PHP经典面试题之设计模式(经常遇到)
- 大众点评面试经历
- PHP面试题之文件目录操作