LinuxC字符串处理

简介: 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);

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

正则表达式



目录
相关文章
|
2天前
|
数据采集 人工智能 安全
|
11天前
|
云安全 监控 安全
|
3天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
994 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1693 9
|
8天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
635 152
|
10天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
609 14
|
9天前
|
人工智能 自然语言处理 API
Next AI Draw.io:当AI遇见Draw.io图表绘制
Next AI Draw.io 是一款融合AI与图表绘制的开源工具,基于Next.js实现,支持自然语言生成架构图、流程图等专业图表。集成多款主流大模型,提供智能绘图、图像识别优化、版本管理等功能,部署简单,安全可控,助力技术文档与系统设计高效创作。
683 151