Skip to content

字符串处理 ​

字符串输入/输出 ​

字符串输出 ​

       常用的字符串输出函数有 putchar()、 puts()、 fputc()、 fputs(),前面我们经常使用 printf()函数来输出字符串信息,而并没有使用到 putchar()、 puts()、 fputc()、 fputs()这些函数,原因在于printf()可以按照自己规定的格式输出字符串信息,一般称为格式化输出

       puts()函数用来向标准输出设备(屏幕、显示器)输出字符串并自行换行。 把字符串输出到标准输出设备,将' \0 '转换为换行符' \n '。

c
#include <stdio.h>
int puts(const char *s);

       putchar()函数可以把参数 c 指定的字符(一个无符号字符)输出到标准输出设备, 其输出可以是一个字符,可以是介于 0~127 之间的一个十进制整型数(包含 0 和 127,输出其对应的 ASCII 码字符),也可以是用 char 类型定义好的一个字符型变量。

c
#include <stdio.h>
int putchar(int c);

       fputc()与 putchar()类似,也用于输出参数 c 指定的字符(一个无符号字符),与putchar()区别在于,putchar()只能输出到标准输出设备,而 fputc()可把字符输出到指定的文件中,既可以是标准输出、标准错误设备,也可以是一个普通文件。

c
#include <stdio.h>
int fputc(int c, FILE *stream);

       fputs()与 puts()类似,也用于输出一条字符串,与 puts()区别在于, puts()只能输出到标准输出设备,而 fputs()可把字符串输出到指定的文件中,既可以是标准输出、标准错误设备,也可以是一个普通文件。

c
#include <stdio.h>
int fputs(const char *s, FILE *stream);

字符串输入 ​

       gets()函数用于从标准输入设备(譬如键盘)中获取用户输入的字符串

c
#include <stdio.h>
char *gets(char *s);

gets()与 scanf()的区别

gets()函数不仅比 scanf 简洁,而且,就算输入的字符串中有空格也可以, 因为 gets()函数允许输入的字符串带有空格、制表符

gets()会将回车换行符从输入缓冲区中取出来,然后将其丢弃,所以使用 gets()读走缓冲区中的字符串数据之后,缓冲区中将不会遗留下回车换行符;

getchar()函数用于从标准输入设备中读取一个字符(一个无符号字符)

c
#include <stdio.h>
int getchar(void);

字符串长度 ​

       C 语言函数库中提供了一个用于计算字符串长度的函数 strlen()

c
#include <string.h>
size_t strlen(const char *s);

       sizeof 和 strlen 的区别

  • sizeof 是 C 语言内置的操作符关键字,而 strlen 是 C 语言库函数;
  • sizeof 仅用于计算数据类型的大小或者变量的大小,而 strlen 只能以结尾为' \0 '的字符串作为参数;
  • 编译器在编译时就计算出了 sizeof 的结果,而 strlen 必须在运行时才能计算出来;
  • sizeof 计算数据类型或变量会占用内存的大小, strlen 计算字符串实际长度。

字符串拼接 ​

       C 语言函数库中提供了 strcat()函数或 strncat()函数用于将两个字符串连接(拼接)起来

       strncat()与 strcat()的区别在于, strncat 可以指定源字符串追加到目标字符串的字符数量,

c
#include <string.h>
char *strcat(char *dest, const char *src);

#include <string.h>
char *strncat(char *dest, const char *src, size_t n);

字符串拷贝 ​

       C 语言函数库中提供了 strcpy()函数和 strncpy()函数用于实现字符串拷贝        strncpy()与 strcpy()的区别在于, strncpy()可以指定从源字符串 src 复制到目标字符串dest 的字符数量

c
#include <string.h>
char *strcpy(char *dest, const char *src);

#include <string.h>
char *strncpy(char *dest, const char *src, size_t n)

       memcpy、 memmove、 bcopy, 字符串拷贝本质上也只是内存数据的拷贝,所以这些库函数同样也是适用的,

内存填充 ​

       在编程中,经常需要将某一块内存中的数据全部设置为指定的值,譬如在定义数组、结构体这种类型变量时,通常需要对其进行初始化操作,而初始化操作一般都是将其占用的内存空间全部填充为 0。

       memset()函数用于将某一块内存的数据全部设置为指定的值

c
#include <string.h>
void *memset(void *s, int c, size_t n);

字符串比较 ​

       C 语言函数库提供了用于字符串比较的函数 strcmp()和 strncmp(), strcmp()        strncmp()与 strcmp()函数一样,也用于对字符串进行比较操作,但最多比较前 n 个字符

c
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);

字符串查找 ​

       字符串查找在平时的编程当中也是一种很常见的操作,譬如从一个给定的字符串当中查找某一个字符或者一个字符串,并获取它的位置。 C 语言函数库中也提供了一些用于字符串查找的函数

       strchr()函数可以查找到给定字符串当中的某一个字符        strrchr()与 strchr()函数一样,它同样表示在字符串中查找某一个字符,返回字符第一次在字符串中出现的位置,如果没找到该字符,则返回值 NULL,但两者唯一不同的是,strrchr()函数在字符串中是从后到前(或者称为从右向左)查找字符,找到字符第一次出现的位置就返回,返回值指向这个位置        strstr()可在给定的字符串 haystack 中查找第一次出现子字符串 needle 的位置,不包含结束字符' \0 ',

c
#include <string.h>
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *haystack, const char *needle);

字符串与数字互转 ​

字符串转整形数据 ​

       C 函数库中提供了一系列函数用于实现将一个字符串转为整形数据,主要包括 atoi()、 atol()、 atoll()以及strtol()、 strtoll()、 strtoul()、 strtoull()等, 它们之间的区别主要包括以下两个方面:

  • 数据类型(int、 long int、 unsigned long 等)。
  • 不同进制方式表示的数字字符串(八进制、十六进制、十进制)。

       atoi()、 atol()、 atoll()三个函数可用于将字符串分别转换为 int、 long int 以及 long long 类型的数据

c
#include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);

       strtol()、 strtoll()两个函数可分别将字符串转为 long int 类型数据和 long long ing 类型数据

c
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

       strtol()、strtoll()一样,区别在于返回值的类型不同,strtoul()返回值类型是 unsigned long int, strtoull()返回值类型是 unsigned long long int

c
#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);

字符串转浮点型数据 ​

      C 函数库中用于字符串转浮点型数据的函数有 atof()、 strtod()、 strtof()、 strtold()

      atof()用于将字符串转换为一个 double 类型的浮点数据       strtof()、 strtod()以及 strtold()三个库函数可分别将字符串转换为 float 类型数据、double 类型数据、 long double 类型数据

c
#include <stdlib.h>
double atof(const char *nptr);

double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);

数字转字符串 ​

      数字转换为字符串推荐大家使用前面介绍的格式化 IO 相关库函数,譬如使用 printf()将数字转字符串、并将其输出到标准输出设备或者使用 sprintf()或 snprintf()将数字转换为字符串并存储在缓冲区中

正则表达式 ​