C语言——字符串的基本操作
1. 字符和字符串的区别
- 符号
字符 ‘ ' 单引号
字符串 “ ” 双引号
-
内容
字符 单个字符
字符串 多个字符
-
输入输出格式
字符 %c
字符串 %s
-
标识
字符串
\0做结尾
2. 字符串的本质
字符串的本质上就是一个字符串数组
“hello world” 这样的字符串,就是包含其中各个元素的,并且结尾为 \0的一个一维字符数组
如:
char hi[12] = {'H','e','l','l','o',' ','w','o','r','l','d','\0'};
因为一个字符串要有\0 作为结尾,所以字符数组的长度要比本身字符数口多一个
如上例中,字符串有11个,但是字符数组长度要达到12
3. 字符串的应以与初始化
-
字符串面量
"hello world" // 注意:字面量是常量 -
字符数组:
1.数组形式
char hi[3] = {'H','i','\0'}; char hello[] = {'H','e','l','l','o',' ','w','o','r','l','d','\0'};2.直接赋首地址
char shool[20] = "第一中学";3.省略长度
char name1[] = "Alan"; char name2[] = {"Alan"};4.字符指针
char *name3 = "Alan"; char *s = "第一中学";
4. 字符串遍历
char hi[] = "I am happy";
// 1. for循环遍历
for(int i=0;i<11;i++){
printf("%c",hi[i]);
}
// 2. 直接输出
printf(hi);
// 3. 字符串格式化输出
printf("%s",hi);
5. 字符串二维数组
// 常见姓名
char name1[] = "张三";
char name2[] = "李四";
char name3[] = "王五";
// 存储多个字符串
// 二维数组
char name[][256] = {"张三","李四","王五"};
// 一维指针数组
char *name[] = {"张三","李四","王五"};
对于printf来说,最重要的是?
# 对于printf和scanf来说,字符串最重要的是其起始地址
# 如打印一个字符串:
- char *test = "hey gays!";
1. printf(test);
2. printf("%s",test);
# 对于printf这个函数而言,只要知道字符串开头的地址,那么就一直打印下去,一直到碰到`\0`的时候停止
# 如:
- printf("Hello \0 world");
6. 常见的字符串操作函数
stdio.h
输入:
scanf();
gets();
getchar();
输出:
printf();
puts();
putchar();
string.h
连接:strcat()
拷贝:strcpy()
比较:strcmp()
获取长度:strlen()
大小写转换:strupr() strlwr()
拼接字符串:sprintf()
测试:
#include "stdio.h"
#include "string.h"
int main(){
char hi[] = "hello";
char s2[] = "Alice";
char str[256];
printf("%s\n",strcat(hi," world")); // 连接
printf("%s \n",strcpy(str,"come on")); // 拷贝
printf("%d \n",strcmp("你好","你好")); // 比较
printf("%d \n",strlen(str)); // 获取长度
printf("%s \n",strupr(str)); // 转成大写
return 0;
}