1、字符串输入输出
1.1 字符串输出
1.1.1 puts()
输出字符串并自动换行
#include <stdio.h> int puts(const char *s);
1.1.2 putchar()
输出一个无符号字符到标准设备上
#include <stdio.h> int putchar(int c);
1.1.3 fputc()
和putchar一样是将单个字符输出,不同的是fputc可以指定输出的文件
#include <stdio.h> int fputc(int c, FILE *stream);
1.1.4 fputs()
同理fputc
#include <stdio.h> int fputs(const char *s, FILE *stream);
.2 字符串输入
1.2.1 gets()
从标准输入设备中获取用户输入的字符串。输入的字符串中就算是有空格也可以直接输入,字符串输入完成之后按回车即可,gets()函数不检查缓冲区溢出
#include <stdio.h> char *gets(char *s);
和scanf()的区别
- gets()函数允许输入
的字符串带有空格、制表符,输入的空格和制表符也是字符串的一部分,仅以回车换行符作为字符 - 串的分割符, 而scanf()函数以上所提到的都会作为分隔符。
- gets()函数读取数据后,缓冲区不会遗留回车换行符。而scanf()读取数据后,缓冲区任然还存在用户输入的分隔符。
1.2.2 getchar()
从标准输入设备中读取一个字符(无符号字符)
#include <stdio.h> int getchar(void); // 该函数以无符号 char 强制转换为 int 的形式返回读取的字符
1.2.3 fgets()
和gets()一样,获取输入的字符串
#include <stdio.h> char *fgets(char *s, int size, FILE *stream);
与gets的区别:
- gets只能从标准输入设备中获取字符串,而fgets即可从标准设备中获取(fgets(s, sizeof(s), stdin)), 又可从文件中获取
- fgets()可以设置获取字符串的最大字符数
gets()会将缓冲区中的换行符’\n’读取出来、将其丢弃、将’\n’替换为字符串结束符’\0’;fgets()也会将
缓冲区中的换行符读取出来,但并不丢弃,而是作为字符串组成字符存在,读取完成之后自动在最
- 后添加字符串结束字符’\0’
1.2.4 fgetc()
读取一个输入字符,可指定输入字符的文件或标准输入设备(stdin)
#include <stdio.h> int fgetc(FILE *stream);
2. 字符串处理
2.1 strlen()
获取字符串串长度
#include <string.h> size_t strlen(const char *s);
与C语言内置操作符关键字sizeof区别
- sizeof 仅用于计算数据类型的大小或者变量的大小,而 strlen 只能以结尾为’ \0 '的字符串作为参数
- 编译器在编译时就计算出了 sizeof 的结果,而 strlen 必须在运行时才能计算出来
2.2 strcat()
字符串拼接, 将字符串src拼接到字符串dest。
#include <string.h> char *strcat(char *dest, const char *src);
2.2 strcat()
字符串拼接, 将字符串src拼接到字符串dest。
#include <string.h> char *strcat(char *dest, const char *src);
2.3 strncat()
可指定源字符串追加到目标字符串的字符数量(防止溢出)
#include <string.h> char *strncat(char *dest, const char *src, size_t n);
2.4 strcpy()
字符串拷贝,将字符串src拷贝到dest空间
#include <string.h> char *strcpy(char *dest, const char *src);
2.5 strncpy()
字符串拷贝,可指定源字符串拷贝到目标字符串的字符数量(防止溢出)
2.6 memset()
字符串填充,多用于初始化字符串
#include <string.h> void *memset(void *s, int c, size_t n); // 目标字符串首地址,填充的数据(一般为0),填充的字节数
类似函数:bzero(),
#include <strings.h> void bzero(void *s, size_t n); // 将一段内存空间中的数据全部设置为 0
2.7 strcmp()
字符串比较,该函数进行字符串比较,主要是通过比较字符串中的字符对应的 ASCII 码值,strcmp 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现了不同的字符,或者某一字符串已经到达末尾(遇见了字
符串结束字符’ \0 ')
#include <string.h> int strcmp(const char *s1, const char *s2);
2.8 strncmp()
字符串比较,指定比较的长度,最多比较前n个字符
#include <string.h> int strncmp(const char *s1, const char *s2, size_t n);
2.9 strchr()
查找到给定字符串中的某一个字符
返回值: 返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL
#include <string.h> char *strchr(const char *s, int c);
2.10 strrchr()
与strchr()不同的是,该函数从右边开始寻找第一次出现字符c的位置,而不是左边
#include <string.h> char *strrchr(const char *s, int c);
2.11 strstr()
在给定字符串haystack中查找子字符串needle
返回值: 如果目标字符串 haystack 中包含了子字符串 needle,则返回该字符串首次出现的位置;如果未
能找到子字符串 needle,则返回 NULL。
#include <string.h> char *strstr(const char *haystack, const char *needle);
3. 字符串与数字之间的互转
3.1 字符串转数字
3.1.1 atoi, atol, atoll
三个函数可用于将字符串分别转换为 int、long int 以及 long long 类型的数据
目标字符串 nptr 中可以包含非数字字符,转换时跳过前面的空格字符(如果目标字符串开头存在空格
字符),直到遇上数字字符或正负符号才开始做转换,而再遇到非数字或字符串结束时(’ /0 ')才结束转换,
并将结果返回。
#include <stdlib.h> int atoi(const char *nptr); long atol(const char *nptr); long long atoll(const char *nptr);
3.1.2 strtol, strtoll
可分别将字符串转为 long int 类型数据和 long long ing 类型数据, 可指定进制
#include <stdlib.h> long int strtol(const char *nptr, char **endptr, int base); long long int strtoll(const char *nptr, char **endptr, int base);
nptr:需要进行转换的目标字符串。
endptr:char **类型的指针,如果 endptr 不为 NULL,则 strtol()或 strtoll()会将字符串中第一个无效字符的地址存储在endptr 中。如果根本没有数字,strtol()或 strtoll()会将 nptr 的原始值存储在endptr 中(并返回 0)。也可将参数 endptr 设置为 NULL,表示不接收相应信息。
base:数字基数,参数 base 必须介于 2 和 36(包含)之间,或者是特殊值 0。参数 base 决定了字符串转换为整数时合法字符的取值范围,譬如,当 base=2 时,合法字符为’ 0 ‘、’ 1 ‘(表示是一个二进制表示的数字字符串);当 base=8 时,合法字符为’ 0 ‘、’ 1 ‘、’ 2 ‘、’ 3 ‘……’ 7 ‘(表示是一个八进制表示的数字字符串);当 base=16 时,合法字符为’ 0 ’ 、’ 1 ‘、’ 2 ‘、’ 3 ‘……’ 9 ‘、’ a ‘……’ f ‘(表示是一个十六进制表示的数字字符串);当 base 大于 10 的时候,’ a ‘代表 10、’ b ‘代表 11、’ c ‘代表 12,依次类推,’ z '代表 35(不区分大小写)。
返回值:分别返回转换之后得到的 long int 类型数据以及 long long int 类型数据。
需要进行转换的目标字符串可以以任意数量的空格或者 0 开头,转换时跳过前面的空格字符,直到遇
上数字字符或正负符号(’ + ‘或’ - ‘)才开始做转换,而再遇到非数字或字符串结束时(’ /0 ')才结束转换,并将
结果返回
3.1.3 strtoul, strtoull
将字符串分别转为unsinged long int , unsigned long long int型整数
#include <stdlib.h> unsigned long int strtoul(const char *nptr, char **endptr, int base); unsigned long long int strtoull(const char *nptr, char **endptr, int base);
3.1.4 atof()
将字符串转为double类型的浮点数据
#include <stdlib.h> double atof(const char *nptr);
3.1.5 strtod(), strtof, strtold
分别将字符串转换为 double 类型数据、float 类型数据、long double 类型数据
#include <stdlib.h> double strtod(const char *nptr, char **endptr); float strtof(const char *nptr, char **endptr); long double strtold(const char *nptr, char **endptr);
3.2 数字转字符串
数字转字符串直接用**sprintf()和snprintf()**即可