1. 头文件
#include <string.h>
2. 字符串复制
2-1. strcpy(str1, str2)
2-1-1. strlen(str1) >= strlen(str2) + 1 ('\0')
2-1-2. str1的内容完全被覆盖
2-1-3. str2 可以是 char[] 或 char*
char str1[] = "abc", str2[] = "123";
strcpy(str1, str2); # str2 -> str1
2-2. strncpy(str1, str2, n)
2-2-1. strlen(str1) >= (n 或 strlen(str2) + 1)
2-2-2. str1的内容部分或完全被覆盖
2-1-3. str2 可以是 char[] 或 char*
n > strlen(str2) : 不足 n 的部分用 '\0' 补齐, 最后再加 '\0',完全覆盖 str1
n <= strlen(str2) : 复制 n 个字符, 最后不添加 '\0', 部分覆盖 str1
3. 字符串连结
3-1. strcat
char str1[] = "abc", str2[] = "123", p[6];
strcat(str1, str2); # 相当于 str1 = str1 + str2
3-2. strncat
strncat(str1, str2, n);
n > strlen(str2) : 连结 str2 直到末尾 (其中要包括结尾的 '\0')
n <= strlen(str2) : 连结 str2 中前 n 个字符, 再在末尾添加 '\0'
4. 字符串比较 (大小关系按照 abc 顺序比较)
char *str1 = "abc", *str2 = "abc";
int res = strcmp(str1, str2);
int res = strncmp(str1, str2, n); ('\0' 以后不做比较)
=0 : str1 = str2
<0 : str1 < str2
>0 : str1 > str2
5. 字符串长度
得出的长度不包含结尾的 '\0', 但在 char[] 里保存字符串时要包含 '\0' 的长度 1
char *str1 = "abc";
int len = strlen(str1); # 3
6. 字符查找
字符若存在, 则返回字符在串中的指针, 不存在则返回 NULL
char *str1 = "abcba";
char *p = strchr(str1, 'b'); (从左端开始查找)
char *p = strchr(str1, 0); (返回字符串末尾 \0 的指针)
char *p = strrchr(str1, 'b'); (从右端开始查找, 可以指定 strrchr(str1, 0))
7. 字符串查找
子串若存在, 则返回子串在父串中的指针, 不存在则返回 NULL
char *str1 = "abcba";
char *p = strstr(str1, "bc"); (从左端开始查找, 子串是 '\0' 时, 返回 str1)
char *p = strpbrk(str1, "cb"); (从左端开始查找, 子串中任意一字符在父串中出现的最靠前的指针)
8. 字串在父串中的长度
8-1. 从左端开始, 字串在父串中出现的长度, 不包含 '\0' 以及其后的字符
char *str1 = "abcba";
int len = strspn(str1, "acd"); (a -> 1)
int len = strspn(str1, "abcde"); (abc -> 3)
8-2. 从左端开始, 不包含子串中任意字符的长度
char *str1 = "abcba";
int len = strcspn(str1, "db"); (1, 直到 b 出现)
int len = strcspn(str1, "12"); (5, 1 2 均未出现)
int len = strcspn(str1, "1b"); (1, 直到 b 出现)
9. 字符串分割
可以指定复数个分割符
char str[] = "ABCD-ef.1234-G", *tp;
tp = strtok(str, "-."); puts(tp);
while (tp != NULL)
{
tp = strtok(NULL,"-.");
if (tp != NULL) puts(tp);
}
10. 在 n 字节 buff 中查找字符
可以包括 \0 -> 当作普通字符进行查找, 返回字符指针或 NULL
char str[] = "abcdef\0ghij";
char *p = memchr(str, 'h', 11);
11. 比较 n 字节中的 buff 串
以 unsigned char 的形式比较
char buf1[] = "\0abc\0de";
char buf2[] = "\0abc\0de";
char buf3[] = "\0abcdef";
memcmp(buf1, buf2, 7); (buf1 == buf2)
memcmp(buf1, buf3, 7); (buf1 != buf3)
12. 按照错误号返回错误信息
strerror(0)
strerror(10)
0 件のコメント:
コメントを投稿