当前位置:   article > 正文

linux C编程8-字符串处理_linux c strchr

linux c strchr

1、字符串输出

1.1、putchar()函数

向标准输出设备输出一个字符。

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

参数 c: 需要进行输出的字符。
返回值: 出错将返回 EOF。

1.2、fputc()函数

输出一个字符。

注:与 putchar()区别在于,putchar()输出到标准输出设备,而 fputc()可把字符输出到指定的文件中。

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

参数 c: 需要进行输出的字符。
参数  stream: 文件指针。
返回值: 成功时返回输出的字符; 出错将返回 EOF。

1.3、puts()函数

向标准输出设备输出字符串并自行换行(即遇到' \0 '结束输出,并将' \0 '转换为换行符' \n ')。

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

参数 s: 需要进行输出的字符串。
返回值: 成功返回一个非负数;失败将返回 EOF, EOF 其实就是-1。

1.4、fputs()函数

输出字符串并自行换行(即遇到' \0 '结束输出,并将' \0 '转换为换行符' \n ')

注:与 puts()区别在于, puts()只能输出到标准输出设备,而 fputs()可把字符串输出到指定的文件中。

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

参数 s: 需要输出的字符串。
参数 stream: 文件指针。
返回值: 成功返回非负数;失败将返回 EOF。

2、字符串输入

2.1、getchar()函数

用于从标准输入设备中读取一个字符。

注:从输入缓冲区读取字符数据,但只读取一个字符,包括空格、 TAB 制表符、换行回车符等。

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

返回值: 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

2.2、fgetc()函数

读取一个输入字符。

注:fgetc()与 getchar()的区别在于, fgetc 可以指定输入字符的文件,既可以从标准输入设备输入字符,也可以从一个普通文件中输入字符。

  1. #include <stdio.h>
  2. int fgetc(FILE *stream);

参数 stream: 文件指针。
返回值: 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。

2.3、fgets ()函数

获取输入的字符串。

  1. #include <stdio.h>
  2. char *fgets(char *s, int size, FILE *stream);

参数 s: 指向字符数组的指针,用于存储字符串。
参数 size: 这是要读取的最大字符数。
参数 stream: 文件指针。

返回值: 如果成功, 该函数返回指向 s 的指针; 如果发生错误或者到达末尾时还未读取任何字符,则返回 NULL。

2.4、fgets()与 scanf()的区别

分隔符

fgets()函数以回车作为分隔符

scanf()函数空格、换行符、 TAB 制表符等

缓冲区fgets()读走缓冲区中的字符串数据之后,缓冲区中将不会遗留下回车换行符
使用scanf()读走缓冲区中的字符串数据时,并不会将分隔符(空格、 TAB 制表符、 回车换行符等) 读走将其丢弃,所以使用 scanf()读走缓冲区中的字符串数据之后,缓冲区中依然还存在用户输入的分隔符。

3、字符串长度

用于计算字符串长度。

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

参数 s: 需要进行长度计算的字符串,字符串必须包含结束字符' \0 '。
返回值: 返回字符串长度(以字节为单位),字符串结束字符' \0 '不计算在内。

3.1、sizeof 和 strlen 的区别

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

4、字符串拼接

4.1、strcat()函数

将两个字符串连接(拼接)起来。

注:strcat()函数会把 src 所指向的字符串追加到 dest 所指向的字符串末尾,所以必须要保证 dest 有足够的存储空间来容纳两个字符串,否则会导致溢出错误 dest 末尾的' \0 '结束字符会被覆盖, src 末尾的结束字符'\0 '会一起被复制过去,最终的字符串只有一个' \0 '。

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

参数 dest: 目标字符串。
参数 src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

4.2、strncat()函数

strncat 可以指定源字符串追加到目标字符串的字符数量
注:如果源字符串 src 包含 n 个或更多个字符, 则 strncat()将 n+1 个字节追加到 dest 目标字符串(src 中的 n个字符加上结束字符' \0 ')。

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

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 要追加的最大字符数。

返回值: 返回指向目标字符串 dest 的指针。

5、字符串拷贝

5.1、strcpy()函数

字符串拷贝。strcpy()会把 src(必须包含结束字符' \0 ') 指向的字符串复制(包括字符串结束字符' \0 ') 到 dest,所以必须保证 dest 指向的内存空间足够大,能够容纳下 src 字符串,否则会导致溢出错误。

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

参数 dest: 目标字符串。
参数 src: 源字符串。
返回值: 返回指向目标字符串 dest 的指针。

5.2、strncpy()函数

strncpy()可以指定从源字符串 src 复制到目标字符串 dest 的字符数量。
注:把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 n 小于或等于 src 字符串长度(不包括结束字符的长度)时, 则复制过去的字符串中没有包含结束字符' \0 ';当 n 大于 src 字符串长度时,则会将 src 字符串的结束字符' \0 '也一并拷贝过去, 必须保证 dest 指向的内存空间足够大,能够容纳下拷贝过来的字符串,否则会导致溢出错误。

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

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。
返回值: 返回指向目标字符串 dest 的指针。

5.3、memcpy()函数

内存拷贝。

  1. #include <string.h>
  2. void *memcpy(void *dest, const void *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。

5.3、memmove()函数

memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

  1. #include <string.h>
  2. void *memmove(void *dest, const void *src, size_t n);

参数 dest: 目标字符串。
参数 src: 源字符串。
参数 n: 从 src 中复制的最大字符数。

5.3、bcopy()函数

将字符串src的前n个字节复制到dest中。

  1. #include <strings.h>
  2. void bcopy(const void *src, void *dest, size_t n);

参数 src: 源字符串。

参数 dest: 目标字符串。
参数 n: 从 src 中复制的最大字符数。

注:bcopy不检查字符串中的空字节NULL,函数没有返回值。 在POSIX.1-2001中,bcopy()被标记为不赞成使用,到POSIX.1-2008,bcopy()被移除出了标准,POSIX标准建议用memcpy()、memmove()代替。

6、内存填充

6.1、memset 函数

用于将某一块内存的数据全部设置为指定的值。

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

参数 s: 需要进行数据填充的内存空间起始地址。
参数 c: 要被设置的值,该值以 int 类型传递。
参数 n: 填充的字节数。
返回值: 返回指向内存空间 s 的指针。

6.2、bzero 函数

用于将一段内存空间中的数据全部设置为 0.

  1. #include <strings.h>
  2. void bzero(void *s, size_t n);

参数 s: 内存空间的起始地址。
参数 n: 填充的字节数。
返回值: 无返回值。

7、字符串比较

7.1、strcmp()函数

strcmp 进行字符串比较,主要是通过比较字符串中的字符对应的 ASCII 码值, strcmp 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现了不同的字符,或者某一字符串已经到达末尾(遇见了字符串结束字符' \0 ')。

  1. #include <string.h>
  2. int strcmp(const char *s1, const char *s2);

参数 s1: 进行比较的字符串 1。
参数 s2: 进行比较的字符串 2。
返回值:

如果返回值小于 0则表示 str1 小于 str2
如果返回值大于 0则表示 str1 大于 str2
如果返回值等于 0则表示字符串 str1 等于字符串 str2

7.2、strncmp()函数

用于字符串的前 n 个字符进行比较。

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

参数 s1: 参与比较的第一个字符串。
参数 s2: 参与比较的第二个字符串。
参数 n: 最多比较前 n 个字符。
返回值: 返回值含义与 strcmp()函数相同。

8、字符串查找

8.1、strchr()函数

查找到给定字符串当中的某一个字符(从左到右)。

  1. #include <string.h>
  2. char *strchr(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。
返回值:
返回字符 c 第一次在字符串 s 中出现的位置,如果未找到字符 c,则返回 NULL。
字符串结束字符' \0 '也将作为字符串的一部分, 因此,如果将参数 c 指定为' \0 ',则函数将返回指向结束字符的指针。 strchr 函数在字符串 s 中从前到后(或者称为从左到右)查找字符 c,找到字符 c 第一次出现的位置就返回,返回值指向这个位置,如果找不到字符 c 就返回 NULL。

8.2、strrchr()函数

查找到给定字符串当中的某一个字符(从右到左)。

  1. #include <string.h>
  2. char *strrchr(const char *s, int c);

8.3、strstr()函数

可在给定的字符串中查找第一次出现子字符串的位置,不包含结束字符' \0 '

  1. #include <string.h>
  2. char *strstr(const char *haystack, const char *needle);

参数 haystack: 目标字符串。
参数 needle: 需要查找的子字符串。
返回值: 如果目标字符串 haystack 中包含了子字符串 needle,则返回该字符串首次出现的位置;如果未能找到子字符串 needle,则返回 NULL。

8.4、strpbrk()函数

检索字符串 s中第一个匹配字符串accept中的字符(不包含空结束字符)。也就是说,依次检验字符串s中的字符,当被检验字符在accept中也包含时,则停止检验,并返回该字符。

  1. #include <string.h>
  2. char *strpbrk(const char *s, const char *accept);

8.5、index()函数

函数返回一个指针,指向字符串s中第一次出现的字符c。结束空字节('\0')被认为是字符串的一部分。 

  1. #include <strings.h>
  2. char *index(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。

返回值:函数返回一个指向匹配字符的指针,如果没有找到该字符则返回NULL。

注:由于index()在POSIX中已弃用且不属于C标准库,因此应使用strchr()

8.6、rindex()函数

函数返回一个指针,指向字符串s中第一次出现的字符c。结束空字节('\0')被认为是字符串的一部分。 

  1. #include <strings.h>
  2. char *rindex(const char *s, int c);

参数 s: 给定的目标字符串。
参数 c: 需要查找的字符。

返回值:函数返回一个指向匹配字符的指针,如果没有找到该字符则返回NULL。

注:由于rindex()在POSIX中已弃用且不属于C标准库,因此应使用strrchr()。

9、字符串转数字

9.1、atoi()函数

将字符串转换为int类型。

  1. #include <stdlib.h>
  2. int atoi(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 int 类型数据。

注:目标字符串 nptr 中可以包含非数字字符, 转换时跳过前面的空格字符(如果目标字符串开头存在空格字符) ,直到遇上数字字符或正负符号才开始做转换,而再遇到非数字或字符串结束时(' /0 ')才结束转换,并将结果返回。

9.2、atol()函数

将字符串转换为long类型。

  1. #include <stdlib.h>
  2. long atol(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 long int 类型数据。

9.3、atoll()函数

将字符串转换为long long类型。

  1. #include <stdlib.h>
  2. long long atoll(const char *nptr);

参数 nptr: 需要进行转换的字符串。
返回值: 分别返回转换之后得到的 long long 类型数据。

9.4、atof()函数

将字符串转换为一个 double 类型的浮点数据。

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

参数 nptr: 需要进行转换的字符串。
返回值: 返回转换得到的 double 类型数据。

9.5、strtol()函数

strtol()可以实现将多种不同进制数表示的字符串转换为整形数据。

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

参数 nptr: 需要进行转换的目标字符串。
参数 endptr: char **类型的指针, 如果 endptr 不为 NULL,将字符串中第一个无效字符的地址存储在*endptr 中。 也可将参数 endptr 设置为 NULL,表示不接收相应信息。
参数 base:在 base=0 的情况下, 如果字符串包含一个了“0x”前缀, 表示该数字将以 16 为基数; 如果包含的是“0”前缀,表示该数字将以 8 为基数。当 base=16 时,字符串可以使用“0x”前缀。
返回值: 分别返回转换之后得到的 long int 类型数据。
注:需要进行转换的目标字符串可以以任意数量的空格或者 0 开头, 转换时跳过前面的空格字符,直到遇上数字字符或正负符号(' + '或' - ') 才开始做转换,而再遇到非数字或字符串结束时(' /0 ')才结束转换,并将结果返回。

9.6、strtoll()函数

strtoll()可以实现将多种不同进制数 表示的字符串转换为整形数据。

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

9.7、strtoul()函数

使用方法与 strtol()一样,区别在于返回值的类型不同, strtoul()返回值类型是 unsigned
long int。

  1. #include <stdlib.h>
  2. unsigned long int strtoul(const char *nptr, char **endptr, int base);

9.8、strtoull()函数

使用方法与strtoll()一样,区别在于返回值的类型不同 strtoull()返回值类型是 unsigned long long int。

  1. #include <stdlib.h>
  2. unsigned long long int strtoull(const char *nptr, char **endptr, int base);

9.9、strtof()函数

将字符串转换为 float 类型数据

  1. #include <stdlib.h>
  2. float strtof(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。

9.10、strtod()函数

将字符串转换为double 类型数据。

  1. #include <stdlib.h>
  2. double strtod(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。

9.11、strtold()函数

将字符串转换为long double 类型数据

  1. #include <stdlib.h>
  2. long double strtold(const char *nptr, char **endptr);

注:参数与 strtol()含义相同,但是少了 base 参数。
 

10、数字转字符串

10.1、printf()函数

格式化输出到stdin。

  1. #include <stdio.h>
  2. int printf(const char *format, ...);

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。  

10.2、fprintf()函数

格式化输出到文件。

  1. #include <stdio.h>
  2. int fprintf(FILE *stream, const char *format, ...);

参数 stream:FILE指针

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。  

10.3、dprintf()函数

格式化输出到文件描述符。

  1. #include <stdio.h>
  2. int dprintf(int fd, const char *format, ...);

参数 fd:文件描述符

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

10.2、sprintf()函数

格式化输出到缓冲区。

  1. #include <stdio.h>
  2. int sprintf(char *str, const char *format, ...);

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

注:函数会在字符串尾端自动加上一个字符串终止字符'\0'。 

10.3、snprintf()函数

格式化输出到缓冲区(最多size字节)。

  1. #include <stdio.h>
  2. int snprintf(char *str, size_t size, const char *format, ...);

参数 str:缓存区

参数 size:最大字节

参数 format:格式

返回值:一旦成功返回,将返回打印的字符数(不包括用于结束字符串输出的空字节)。

注:函数会在字符串尾端自动加上一个字符串终止字符'\0'。 
       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/713595
推荐阅读
相关标签
  

闽ICP备14008679号