C语言字符串从入门到进阶指南
目录
字符数组 和 字符串区别
字符数组
char str[5] = {'h', 'e', 'l', 'l', 'o'};
字符串
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[6] = "hello";
printf("%s"); 使用printf打印字符串的时候,必须碰到 \0 结束。
统计字符串每个字符出现的次数
字符串获取 scanf
1)用于存储字符串的空间必须足够大,防止溢出。 char str[5];
2) 获取字符串,%s, 遇到空格 和 \n 终止。
借助“正则表达式”, 获取带有空格的字符串:scanf("%[^\n]", str);
gets
从键盘获取一个字符串, 返回字符串的首地址。 可以获取带有 空格的字符串。 【不安全】
char *gets(char *s);
参数:用来存储字符串的空间地址。
返回值:返回实际获取到的字符串首地址。
代码
如果输入 ni hao 输出的就是 获取的字符串为ni hao
fgets
从stdin获取一个字符串, 预留 \0 的存储空间。空间足够读 \n, 空间不足舍弃 \n 【安全】
char *fgets(char *s, int size, FILE *stream);
参1:用来存储字符串的空间地址。
参2:描述空间的大小。
参3:读取字符串的位置。 键盘 --》 标准输入:std
返回值:返回实际获取到的字符串首地址。
代码
如果输入hello world 输出hello wor
puts
将一个字符串写出到屏幕. printf("%s", "hello"); / printf("hello\n"); / puts("hello"); 输出字符串后会自动添加 \n 换行符。
int puts(const char *s);
参1:待写出到屏幕的字符串。
返回值: 成功:非负数 0。 失败: -1.
代码
fputs
将一个字符串写出到stdout.输出字符串后, 不添加 \n 换行符。
int fputs(const char * str, FILE * stream);
参1:待写出到屏幕的字符串。 屏幕 --》标准输出: stdout
参数:写出位置 stdout
返回值: 成功:0。 失败: -1.
代码
strlen
碰到 \0 结束,不包含'\0'
size_t strlen(const char *s);
参1: 待求长度的字符串
返回:有效的字符个数。
代码
求非空字符串元素个数
判断字符串是否回文
字符串处理函数
头文件 #include <string.h>
字符串拷贝:
strcpy
将 src 的内容,拷贝给 dest。 返回 dest。 保证dest空间足够大。【不安全】
char *strcpy(char *dest, const char *src);
函数调用结束 返回值和 dest参数结果一致。
如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况
strncpy
参数
dest:目的的字符串首地址
src:原字符首要地址
n:指定需要拷贝字符串个数
将 src 的内容,拷贝给 dest。只拷贝 n 个字节。 通常 n 与dest对应的空间一致。
默认 不添加 ‘\0’
char *strncpy(char *dest, const char *src, size_t n);
特性: n > src: 只拷贝 src 的大小
n < src: 只拷贝 n 字节大小。 不添加 ‘\0’
成功返回字符串dest首地址
字符串拼接
strcat
将 src 的内容,拼接到 dest 后。 返回拼接后的字符串。 保证 dest 空间足够大。
char *strcat(char *dest, const char *src);
strncat
将 src 的前 n 个字符,拼接到 dest 后。 形成一个新的字符串。保证 dest 空间足够大。
char *strncat(char *dest, const char *src, size_t n);
函数调用结束 返回值和 dest 参数结果一致。
代码
字符串比较
不能使用 > < >= <= == !=
strcmp
int strcmp(const char *s1, const char *s2)
比较s1和s2两个字符串,如果相等 返回0.如果不相等,进一步表 s1 和 s2 对应位 ASCII码 值。
s1 > s2 返回1
s1 < s2 返回-1
strncmp
int strncmp(const char *s1, const char *s2, size_t n);
比较s1和s2两个字符串的前n个字符,
如果相等 返回0。如果不相等,进一步表 s1 和 s2 对应位 ASCII码值。(不比字符串 ASCII码的和)
s1 > s2 返回1
s1 < s2 返回-1
代码
字符串格式化输入、输出
如果相输入带空格字符串scanf("%[^\n]", str);
sprintf
int sprintf(char *str, const char *format, ...);
功能:根据参数format字符串来转化并格式化数据,然后将结果输出到str指定的空间,直到字符串出现结束符 '/0' 为止
参数:
str 字符串首地址
format:字符串格式,用法和printf()一样
sscanf()
int sscanf(const char *str, const char *format, ...);
功能:从str指定的字符串读取数据,并根据参数fornat字符串来转化并格式化数据
参数:
str:指定的字符串首地址
format:字符串格式,用法和scanf()一样
代码
字符串查找字符子串
strchr()
在字符串str中 找一个字符出现的位置。 返回字符在字符串中的地址。
char *strchr(const char *s, int c);
printf("%s\n" strchr("hehehahahoho", 'a')); --> "ahahoho"
strrchr()
自右向左,在字符串str中 找一个字符出现的位置。 返回字符在字符串中的地址。
char *strrchr(const char *s, int c);
printf("%s\n" strrchr("hehehahahoho", 'a')); --> "ahoho"
strstr()
在字符串str中,找子串substr第一次出现的位置。返回地址。
char *strstr(const char *str, const char *substr);
在字符串中找子串的位置。
printf("%s\n" strrchr("hehehahahoho", "ho")); --> "hoho"
printf("%s\n" strrchr("hehehahahoho", "xixi")); --> NULL
字符串分割
strtok()
按照既定的分割符,来拆分字符串,按 ‘ . ’ “www.baidu.com” 使用方法strtok("www.baidu.com","k"); -->变成
char *strtok(char *str, const char *delim);
参1: 待拆分字符串
参2: 分割符组成的“分割串”
返回:字符串拆分后的首地址。 “拆分”:将分割字符用 '\0'替换。
特性:
1)strtok拆分字符串是直接在 原串 上操作,所以要求参1必须,可读可写(char *str = "www.baidu.com" 不行!!!)2)第一次拆分,参1 传待拆分的原串。 第1+ 次拆分时,参1传 NULL.
代码
字符串转化成浮点数
atoi/atof/atol
使用这类函数进行转换,要求,原串必须是可转换的字符串。
错误使用:"abc123" --> 0; "12abc345" ---> 12; "123xyz" -->123
atoi:字符串 转 整数。 int atoi(const char *nptr);
atof:字符串 转 浮点数
atol:字符串 转 长整数
代码
- 点赞
- 收藏
- 关注作者
评论(0)