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

正则表达式



目录
相关文章
|
7月前
|
存储 数据处理 数据格式
|
7月前
|
存储 人工智能 BI
|
7月前
|
存储 人工智能 BI
|
7月前
|
人工智能 数据处理 数据格式
|
7月前
|
存储 数据处理 数据格式
|
机器学习/深度学习 C语言 数据安全/隐私保护
『正则表达式』概念 及在grep、awk、sed、C语言、Python中的简单应用
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式。它可以用来检查一个字符串是否符合某个规则,或者从一个字符串中提取出符合某个规则的子串。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。
|
Unix Shell
shell编程——getopt
写shell脚本的时候,通过while、case、shift来设计脚本的命令行选项是一件比较麻烦的事,因为Unix命令行的选项和参数自由度很高,支持短选项和长选项,参数可能是可选的,选项顺序可能是无所谓的,等等。
2791 0
|
Python
Python difflib字符串比较脚本
!/usr/bin/python import difflib text1 = """text1: #定义字符串1 This module provides classes and functions for comparing sequences.
1087 0