处理字符串:string.h

作者:追风剑情 发布于:2020-4-25 10:27 分类:C

string.h库定义了size_t类型和空指针要使用的NULL宏。 string.h头文件提供了一些分析和操控字符串的函数,其中一些函数以更通用的方式处理内存。

字符串函数
原型 描述
void *memchr(const void *s, int c, size_t n) 在s指向对象的前n个字符中查找是否有c。如果找到,则返回首次出现c处的指针,如果未找到则返回NULL
int memcmp(const void *s1, const void *s2, size_t n) 比较s1指向对象中的前n个字符和s2指向对象的前n个字符, 每个值都解释为 unsigned char类型。如果n个字符都匹配,则两个对象完全相同;否则,比较两个对象中首次不匹配的字符对。如果两个对象相同,函数返回0;如果在数值上第1个对象小于第2个对象,函数返回于0的值;如果在数值上第1个对象大于第2个对象,函数返回大于0的值
void *memcpy(void *restrict s1, const void *restrict s2, size_t n) 把s2所指向位置上的n字节拷贝到s1指向的位置上,函数返回s1的值。如果两个位置出现重叠,其行为是未定义的
void *memmove(void *s1, const void *s2, size_t n) 把s2所指向位置上的n字节拷贝到s1指向的位置上,其行为与拷贝类似,返回s1的值。但是,如果出现局部重叠情况,该函数会先把重叠的内容拷贝至临时位置
void *memset(void *s, int v, size_t n) 把v的值(转换为 unsigned char)拷贝至s指向的前n字节中,函数返回s
char *strcat(char *restrict s1, const char *restrict s2) 把s2指向的字符串拷贝到s1指向字符串后面,s2字符串的第1个字符覆盖s1字符串的空字符。该函数返回s1
char *strncat(char *restrict s1, const char *restrict s2, size_t n) 把s2指向字符串的n个字符拷贝到s1指向的字符串后面(或拷贝到s2的空字符为止)。s2字符串的第1个字符覆盖s1字符串的空字符。函数返回s1
char *strcpy(char *restrict s1, const char *restrict s2) 把s2指向的字符串拷贝到s1指向的位置。函数返回s1
char *strncpy(char *restrict s1, const char *restrict s2, size_t n) 把s2指向字符串的n个字符拷贝到s1指向的位置(或拷贝到s2的空字符为止)。如果在拷贝n个字符之前遇到空字符,则在拷贝字符后面添加若干个空字符,使其长度为n;如果拷贝n个字符没有遇到空字符,则不添加空字符。函数返回s1
int strcmp(const char *s1, const char *s2) 比较s1和s2指向的两个字符串。如果完全匹配,则两字符串相同,否则比较首次出现不匹配的字符对。通过字符编码值比较字符。如果两个字符串相同,函数返回0;如果第1个字符串小于第2个字符串,函数返回小于0的值;如果第1个字符串大于第2个字符串,函数返回大于0的值
int strcoll(const char *s1, const char *s2) 与 strcmp()类似,但是该函数使用当前本地化的 LC_COLLATE类别(由 setlocale()函数设置)所指定的排序方式进行比较
int strncmp(const char *s1, const char *s2, size_t n) 比较s1和s2指向数组中的前n个字符,或比较到第1个空字符位置。如果所有的字符对都匹配,则两个数组相同否则比较两个数组中首次不匹配的字符对。通过字符编码值比较宇符。如果两个数组相同,函数返回0;如果第1个数组小于第2个数组,函数返回小于0的值;如果第1个数组大于第2个数组,函数返回大于0的值
size_t strxfrm(char *restrict s1, const char *restrict s2, size_t n) 转换s2中的字符串,并把转换后的前n个字符(包括空字符)拷贝到s1指向的数组中。用 strcmp()比较转换后的两个字符串的结果和用 strco11()比较两个未转换宇符串的结果相同。函数返回转换后的字符串长度(不包括末尾的空符)
char *strchr(const char *s, int c) 查找s指向的字符串中首次出现c的位置。空字符是字符串的一部分。函数返回一个指针,指向首次出现c的位置。如果没有找到指定的c则返回NULL
size_t strcspn(const char *s1, const char *s2) 返回s1中未出现s2中任何字符的最大起始段长度
char *strpbrk(const char *s1, const char *s2) 返回一个指针,指向s1中与s2任意字符匹配的第1个字符的位置。如果未发现任何匹配的字符,函数返回NULL
char *strrchr(const char *s, int c) 在s指向的字符串中查找末次出现c的位置(即从s2右侧开始查找字符c首次出现的位置)。空字符是字符串的一部分。如果找到,函数返回指向该位置的指针;如果未找到,则返回NULL
size_t strspn(const char *s1, const char *s2) 返回s1中包含s2所有字符的最大起始段长度
char *strstr(const char *s1, const char *s2) 返回一个指针,指向s1中首次出现s2中字符序列(不包括结束的空字符)的位置。如果未找到,函数返回NULL
char *strtok(char *restrict s1, const char *restrict s2) 该函数把s1字符串分解为单独的记号。s2字符串包含了作为记号分隔符的字符。按顺序调用该函数。第1次调用时,s1应指向待分解的字符串。函数定位到非分隔符后的第1个记号分隔符,并用空字符替换它。函数返回一个指针,指向储存第1个记号的字符串。如果未找到记号,函数返回NULL。在此次调用 strtok()查找字符串中的更多记号。每次调用都返回指向下一个记号的指针,如果未找到则返回NULL(请参看表后面的示例)
char * strerror(int errnum) 返回一个指针,指向与储存在 errnum中的错误号相对应的错误信息字符串(依实现而异)
int strlen(const char *s) 返回字符串s中的字符数(末尾的空字除外)

示例:strtok()函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
	char data[] = " C is\t too#much\nfun!";
	const char tokseps[] = " \t\n#"; //分隔符
	char * pt;

	puts(data);
	pt = strtok(data, tokseps); //首次调用
	while (pt)
	{
		puts(pt);
		pt = strtok(NULL, tokseps);//下一个记号
	}

	system("pause");
	return 0;
}

运行测试
111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号