C语言 字符串操作 笔记

/*
    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;
}
原文地址:https://www.cnblogs.com/lnlin/p/6713295.html