/* C语言字符串的操作笔记 使用代码和注释结合方式记录 */ # include <stdio.h> # include <string.h> int main(void) { // 不受限制的字符串函数 char * ch1 = "Hello World!"; // 此处有警告 char ch2[20] = "Hello World!"; // 计算字符串长度函数 strlen() int i, j; i = strlen(ch1); j = strlen(ch2); printf("第一个字符串的长度为:%d ", i); printf("第二个字符数组的长度为:%d ", j); /* 输出结果: 第一个字符串的长度为:12 第二个字符数组的长度为:12 注意: strlen() 的返回值为无符号数 */ // 复制字符串函数 strcpy() char ch3[20] = "LinLin"; puts(ch3); strcpy(ch3, ch1); puts(ch3); /* 输出结果: LinLin Hello World! 注意: 新字符串以 NUL 字节结尾,且要保证ch3 的长度足够容纳 ch1, 否则 会覆盖ch3 数组后面的内存,因为 strcpy 无法判断是否有足够长度 strcpy() 的返回值为它的第一个参数的一份拷贝 */ // 连接字符串函数 strcat() char ch4[20] = "Hello!"; char ch5[20] = "LinLin"; puts(ch4); puts(ch5); strcat(ch4, ch5); puts(ch4); /* 输出结果: Hello! LinLin Hello!LinLin 注意: ch4 要有足够空间容纳连接后的新字符串 strcat() 的返回值为它的第一个参数的一份拷贝 */ // 字符串比较函数 strcmp() char ch6[20] = "LinLin"; char ch7[20] = "LinLin"; puts(ch6); puts(ch7); if (0 == strcmp(ch6, ch7)) printf("这两个字符串相同! "); /* 输出结果: LinLin LinLin 这两个字符串相同! 注意: 如果ch6 小于 ch7 则返回一个小于 0 的值 反之返回一个大于 0 的值 相等返回 0 如果前面一个字符串为后面一个字符串的前面的一部分,也会被认为小于 后面的字符串,这种比较称为“词典比较” */ /* 长度受限的字符串函数 strncpy(char * s1, char * s2, int len); strncat(char * s1, char * s2, int len); strncmp (char * s1, char * s2, int len); 这些函数的复制,连接,查找功能和上面所说的函数相同,但却受函数的三个 参数,即长度限制 */ // 字符串查找基础 /* 查找一个字符 char * strchr(char const * str, char ch); 该函数会在字符串str中查找ch字符,如果没找到返回NULL指针,反之返回ch第 一次出现的位置 char * strrchr(char const * str, char ch); 与strchr()函数类似,但其返回值为ch字符最后一次出现的位置 查找任何几个字符 char * strpbrk(char const * str, char const * group); 这个函数返回一个指向str中第一个匹配group中任何一个字符的位置,如果都不 匹配,返回一个NULL指针 查找一个子串 char * strstr(char const * s1, char const * s2); 这个函数在s1中查找s2第一次出现的起始位置,并返回一个指向该位置的指针, 如果s2并没有完整的出现在s1的任何一个位置,则返回一个NULL指针 */ // 高级字符串查找 /* 查找一个字符串前缀 size_t strspn(char const * str, char const * group); 用于在字符串的起始位置对字符计数,返回字符串起始部分含有group中字符的数目 size_t strcspn(char const * str, char const * group); 遇上一个函数相反,返回字符串起始部分不含有group中字符的数目 */ int len1, len2; char ch8[20] = "25,142,dfaifn,s23"; len1 = strspn(ch8, "01234"); len2 = strcspn(ch8, "01234"); printf("len1 = %d, len2 = %d ", len1, len2); // 输出结果: len1 = 1, len2 = 0 // 查找标记 /* 一个字符串常包含几个单独的部分,他们彼此分隔开,每次为了处理这些部分,首先 需要将它们从字符串中抽取出来 char * strtok(char * str, char * const sep); sep 参数是一个字符串,定义了用作分隔符的字符集,第一个参数是一个字符串,它 包含了sep中的字符,strtok找到str的下一个标记,并将其用NUL结尾,然后返回一个 指向这个标记的指针。 注意:此函数会修改原字符串,如果原字符串是不可修改的,就将其复制一份拷贝传 给strtok */ /* 字符转换 将大写字母转换成小写字母 char tolower(char ch); 将小写字母转换成大写字母 char toupper(char ch); */ return 0; }