字符串相关函数:
strcat :字符串拼接函数
char *strcat(char *dest, const char *src);
功能:
将src中的字符串拼接到dest中
参数:
@dest 拼接的目的字符串
@src 拼接的源字符串 ,可以是变量也可以是常量
操作逻辑:逐个查找字符串元素,直到第一个'\0'时插入第一个元素,
并按顺序插入整个字符串,最后在末尾添加结束标志'\0'
eg:
char dest[100] = "world";
char src[] = "hello";
strcat(dest,src); //src是一个字符数组数组名
strcat(dest,"hello");//src是一个字符串常量
strcpy:字符串拷贝函数
char *strcpy(char *dest, const char *src);
功能:
将src中字符串拷贝到dest中
用法:
strcpy(dest,src); //dest是一个字符数组的数组名
//src 可以是字符数组数组名
//或 字符串常量
操作逻辑:由于数组是不能整体赋值的,所以需要单个元素赋值,也就是说逐个替换,
直到遇到'\0'时结束
eg:
char dest[10];
char src[10] = "hello";
strcpy(dest,src); //src 数组名
strcpy(dest,"china"); //src是字符串常量
strcmp :字符串比较函数
int strcmp(const char *s1, const char *s2);
功能:
比较s1 和 s2 字符串的大小
参数:
@s1 ---第一个字符串
@s2 ---第二个字符串
返回值:
> 0 s1 > s2
< 0 s1 < s2
==0 s1 == s2
逐个元素比较ASCII码的大小(谁在前面谁大,'\0'的ASCII值最大,为0),如果后面的元素出现ASCII不相等的情况,或者,遇到'\0'
strlen:字符串长度函数
size_t strlen(const char *s);
功能:
统计 给到的字符串的长度
参数:
s //数组名 或 字符串常量
返回值:
表示字符串长度
操作逻辑:从第一个元素数起,直到‘\0’时结束(‘\0’不计入字符串长度)
与sizeof()区分,sizeof计算的是变量占空间大小,strlen计算的是存入这个变量的字符串长度(不一定占满)
eg:
char s[] = "hello";
strlen(s); //数组名
strlen("hello"); //字符串常量
puts():字符串输出函数
功能: 将字符串输出,(它会默认输出一个'\n')
int puts(const char *s);
参数:
s //可以是数组名 也可以是 一个字符串常量
返回值:
成功 非负数
失败 -1
操作逻辑:逐个读入‘\0’之前的数据
eg:
char s[10] = "hello";
puts(s); //数组名
puts("hello"); //字符串常量
gets() :字符串输入函数
功能: 给字符数组中,输入一个"字符串"
char *gets(char *s)
char *gets(char s[]) //传一个字符数组的数组名
参数:
s 表示 需要传的是一个 字符数组的 名字
返回值:
表示 存放字符串的 那块空间的地址
操作逻辑:从第一个读取直到遇到'\n'时停止,并将‘\n’转换为‘\0’
注意:
这个函数是危险的,不推荐使用。(一不小心可能就越界了)
fgets(); //这个函数可以解决(后面学)
与scanf区别:都可以接受字符串,但是scanf不能接收带空白符(例如:'t','b'),但是gets()可以,因为gets()只有遇到换行符'\n'才判断输入结束
注:
1.也就是说,字符串操作函数都需要字符串结束符号'\0'作为基准,所以在实际操作中需要预留'\0'的位置,不能把数组占满
2.字符串操作函数的第一个参数都是被操作的变量名
二维数组:
初始化:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //全部初始化
int a[3][4] = {{1,2,3,4},{0},{9,10,11,12}}; //按行初始化
int a[3][4] = {1,2}; //部分初始化
int a[3][4] ;//未初始化 默认随机值(垃圾值)
注:
1.二维数组中,也可以是可变长数组
int a[n][n]; //n可以是个变量 ,但是使用时,数组不能初始化,产生编译报错
int a[N][N];//但是可以使用宏定义 #define N 4
2.二维数组中,可以省略行数,列数不能省略
int a[3][4];
//3可以省略 4不能省略
int[4] a[]; //本质上省略的还是一维数组的长度
→其实在c语言认识里,int[3][4]的存储方式是int[4] [3],因为c语言开辟内存时,开了3块空间,每块有4个char,相当于一个int[4]类型(假定的类型,c语言没有这么定义)
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] |
二维字符型数组:
char a[5][10]
可以存储最大长度为为10的,5个字符串;
按行初始化:a[5][10]={“hello”,“world“,“who”,“am”,“are”}
可以逐个字符串存储进行初始化