字符串长度
size_t strlen(char const *string);
size_t
在stddef.h中定义,为unsigned int
复制,连接,比较
char *strcpy(char *dst, char const *src);
char *strncpy(char *dst, char const *src, size_t len);
char *strcat(char *dst, char const *src);
char *strncat(char *dst, char const *src, size_t len);
// s1<s2:-; s1>s2:+; s1=s2:0
int strcmp(char const *s1, char const *s2);
int strncmp(char const *s1, char const *s2, size_t len);
strcpy
将src
字符串复制到dst
参数
数据从右向左流动,与赋值语句的流向相同;总是返回结果串
字符串查找
查找一个字符
char *strchr(char const *str, int ch);
char *strrchr(char const *str, int ch);
return: ch
在str
中第一次出现位置的指针(strrchr
反向查找,即返回ch
最后出现的位置的指针),不存在返回NULL
指针。
查找任何几个字符
char *strpbrk(char const *str, char const *group);
return: 指向str
中第一个匹配group
中任何一个字符的字符的位置,未找到则返回NULL
指针。
查找一个子串
char *strstr(char const *s1, char const *s2);
return: 指向s2
第一次在s1
中出现的起始位置的指针; 如果没有找到,返回NULL
指针; 如果s2
是空字符串,返回s1
。
查找一个字符串前缀
size_t strspn(char const *str, char const *group);
size_t strcspn(char const *str, char const *group);
group
指定一个或多个字符,strspn
返回str
起始部分与group
中任意字符匹配的字符数,如计算一个指向字符串的第一个非空字符的指针:
ptr = buffer + strspn(buffer, "\n\r\f\t\v");
strcspn
与strspn
相反,它对str
字符串起始部分中不与group
中任何字符匹配的字符进行计数。
查找标记(token)
char *strtok(char *str, char const *sep);
sep
参数是一个字符串,定义了用作分隔符的字符集合。str
参数指定了一个字符串,它包含零个或多个由sep
字符串中一个或多个分隔符分割的标记。strtok
找到str
中的下一个标记,并将其用NUL
结尾,然后返回一个指向当前位置的指针(strtok
会改变它处理的字符串)。
如果strtok
函数的第一个参数不是NULL
,函数将找到第一个标记,strtok
同时将保存它在字符串中的位置(为下次调用保存),并返回str
起始位置的指针; 如果strtok
的第一个参数是NULL
,函数就在同一个字符串中从被保存的位置开始向下查找;如果字符串中不存在更多的标记,strtok
就返回一个NULL
指针。
/*
** 从一个字符数组中提取空白字符分隔的标记并把它们打印出来(每行一个)
*/
#include <stdio.h>
#include <string.h>
void print_tokens(char *line){
static char whitespace[] = " \t\f\r\v\n";
char *token;
token = strtok(line, whitespace);
while(token != NULL){
printf("Next token is %s\n", token);
token = strtok(NULL, whitespace);
}
}
由于strtok
函数保存它处理函数的局部状态信息,所以不能用它同时解析两个字符串
内存操作
处理任意字节序列:
void *memset(void *dest, int ch, size_t length);
void *memcpy(void *dest, void const *src, size_t length);
void *memmove(void *dest, void const *src, size_t length);
void *memcmp(void const *ptr1, void const *ptr2, size_t length);
void *memchr(void const *dest, int ch, size_t length);
memset
把从a
开始的length
个字节都设置为字符值ch
。memcpy
将从src
的length个字节的内容复制到dest
,但当源字符串与目标字符串重叠时,memcpy的操作结果却不可知,这时应该使用memmove
。memcmp
比较两个任意的字符串,与strcmp
相同。
- older
- Newer