LinuxC字符串处理


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

1.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.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()**即可

正则表达式

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值