您的位置:首页 > 职场人生

黑马程序员 ——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存储了一个字符串

第三种初始化方法:

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给覆盖了

   
 

     

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: