字符数组
字符数组是元素的数据类型为字符类型的数组
char c[ 10 ] , ch[ 3 ] [ 4 ] ;
字符数组的初始化
逐个字符赋值
用字符串常量
例子:
char fruit[ ] [ 7 ] = { "Apple" , "Orange" , "Grape" , "Pear" , "Peach" }
fruit[ 0 ] - > 'A' 'p' 'p' 'l' 'e' '\0' '\0'
fruit[ 0 ] - > 'O' 'r' 'a' 'n' 'g' 'e' '\0'
fruit[ 0 ] - > 'G' 'r' 'a' 'p' 'e' '\0' '\0'
fruit[ 0 ] - > 'P' 'e' 'a' 'r' '\0' '\0' '\0'
fruit[ 0 ] - > 'P' 'e' 'a' 'c' 'h' '\0' '\0'
C语言中无字符串变量,用字符数组处理字符串 字符串结束标志:‘\0’
字符串函数
C 库中实现了很多字符串处理函数
#include < string. h>
几个常见的字符串处理函数
求字符串长度的函数strlen
字符串拷贝函数strcpy
字符串连接函数strcat
字符串比较函数strcmp
字符串长度函数strlen
格式:strlen ( 字符数组)
功能:计算字符串长度
返值:返回字符串实际长度,不包括‘\0 ’在内
\xhh表示十六进制数代表的符号
\ddd表示8 进制的
例:对于以下字符串,strlen ( s) 的值为:
char s[ 10 ] = { ‘A ’, ‘\0 ’, ‘B ’, ‘C ’, ‘\0 ’, ‘D ’} ;
char s[ ] = “\t\v\\\0will\n”;
char s[ ] = “\x69\141 \n”;
答案:1 3 3
字符串拷贝函数strcpy
格式:strcpy ( 字符数组1 , 字符串2 )
功能:将字符串2 ,拷贝到字符数组1 中去
返值:返回字符数组1 的首地址
说明:
字符数组1 必须足够大
拷贝时‘\0 ’一同拷贝
字符串连接函数strcat
格式:strcat ( 字符数组1 , 字符数组2 )
功能:把字符数组2 连到字符数组1 后面
返值:返回字符数组1 的首地址
说明:
字符数组1 必须足够大
连接前, 两串均以‘\0 ’结束; 连接后, 串1 的‘\0 ’取消, 新串最后加‘\0 ’
举例:
#include < string. h>
#include < stdio. h>
int main ( )
{
char destination[ 25 ] ;
char blank[ ] = " " , c[ ] = "C++" ,
turbo[ ] = "Turbo" ;
strcpy ( destination, turbo) ;
strcat ( destination, blank) ;
strcat ( destination, c) ;
printf ( "%s\n" , destination) ;
return 0 ;
}
字符串比较函数strcmp
格式:strcmp ( 字符串1 , 字符串2 )
功能:比较两个字符串
比较规则:对两串从左向右逐个字符比较(ASCII 码),直到遇到不同字符或‘\0 ’为止
返值:返回int型整数
a. 若字符串1 < 字符串2 , 返回负整数
b. 若字符串1 > 字符串2 , 返回正整数
c. 若字符串1 == 字符串2 , 返回零
strncpy ( p, p1, n) 复制指定长度字符串
strncat ( p, p1, n) 附加指定长度字符串
strcasecmp ( ) 忽略大小写比较字符串
strncmp ( p, p1, n) 比较指定长度字符串
strchr ( p, c) 在字符串中查找指定字符
strstr ( p, p1) 查找字符串
isalpha ( ) 检查是否为字母字符
isupper ( ) 检查是否为大写字母字符
islower ( ) 检查是否为小写字母字符
isdigit ( ) 检查是否为数字
数组
数组
构造数据类型之一
数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素
数组中各元素的数据类型要求相同, 用数组名和下标确定。数组可以是一维的,也可以是多维的。
一维数组的定义
所谓一维数组是指只有一个下标的数组。它在计算机的内存中是连续存储的。
C 语言中,一维数组的说明一般形式如下:
< 存储类型> < 数据类型 > < 数组名> [ < 表达式> ] ;
注意事项
C 语言对数组不作越界检查,使用时要注意
int a[ 5 ] ; a[ 5 ] = 10
关于用变量定义数组维数
int i = 15 ; int a[ i]
一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式:数组名[ 下标]
其中:下标可以是常量或整型表达式
一维数组的初始化
初始化方式:在定义数组时,为数组元素赋初值
int a[ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
说明
数组不初始化,其元素值为随机数
对static 数组元素不赋初值,系统会自动赋以0 值
只给部分数组元素赋初值
static int a[ 5 ] ;
等价于:a[ 0 ] = 0 ; a[ 1 ] = 0 ; a[ 2 ] = 0 ; a[ 3 ] = 0 ; a[ 4 ] = 0 ;
int a[ 5 ] = { 6 , 2 , 3 } ;
等价于:a[ 0 ] = 6 ; a[ 1 ] = 2 ; a[ 2 ] = 3 ; a[ 3 ] = 0 ; a[ 4 ] = 0 ;
int a[ 3 ] = { 6 , 2 , 3 , 5 , 1 } ; ( ×)
int a[ ] = { 1 , 2 , 3 , 4 , 5 , 6 } ;
二维数组
二维数组的定义
定义方式:(声明时列数不能省略,行数可以)
数据类型 数组名[ 常量表达式] [ 常量表达式] ;
例int a[ 3 ] [ 4 ] ;
float b[ 2 ] [ 5 ] ;
int c[ 2 ] [ 3 ] [ 4 ] ;
数组元素的存放顺序
原因 : 内存是一维的
二维数组:按行序优先
例子:
int a[ 3 ] [ 4 ]
内存存放顺序
a[ 0 ] [ 0 ]
a[ 0 ] [ 1 ]
a[ 0 ] [ 2 ]
a[ 0 ] [ 3 ]
a[ 1 ] [ 0 ]
a[ 1 ] [ 1 ]
a[ 1 ] [ 2 ]
a[ 1 ] [ 3 ]
a[ 2 ] [ 0 ]
a[ 2 ] [ 1 ]
a[ 2 ] [ 2 ]
a[ 2 ] [ 3 ]
a[ 3 ] [ 0 ]
a[ 3 ] [ 1 ]
a[ 3 ] [ 2 ]
a[ 3 ] [ 3 ]
二维数组元素的引用
形式:数组名[ 下标] [ 下标]
二维数组元素的初始化
分行初始化
按元素排列顺序初始化