小工具知识网

当前位置: 首页 > 行业知识 > 【C语言】解决不同场景字符串问题:巧妙运用字符串函数

行业知识

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

2026-10-31 20:02:48 来源:互联网转载

个人主页:是店小二呀

C语言笔记专栏:C语言笔记

C++笔记专栏: C++笔记

喜欢的诗句:无人扶我青云志 我自踏雪至山巅

文章目录

  • 一、字符函数
    • 1.1 字符分类函数
      • 1.1.1 islower
      • 1.1.2 isupper
      • 1.2字符转换函数
      • 1.3 字符分类函数与字符转换函数配合
      • 二、 字符串函数
        • 2.1 Strlen
        • 2.2 Strcpy
        • 2.3 Strcat
        • 2.4 Strcmp
        • 对于strcpy和strcat越界的调整
        • 2.5 Strncpy
        • 2.6 Strncat
        • 2.7 Strncmp
        • 2.8 Strstr
        • 2.9 Strtok
        • 2.10 Strerror

          一、字符函数

          字符函数一般分为字符分类函数和字符转换函数,它们使用的时候可以相互打配合,这些字符函数统一声明在库函数头文件ctype.h


          1.1 字符分类函数

          1.1.1 islower

          #include #include int main(){   int ret=islower('a')       return 0;}

          【说明】:

          • 字符类型是整型类型的子集,这里可以使用ASCII表达字符
          • 判断参数部分是否为小写字母
          • 如果是小写字母,就返回非零的整数(为真)
          • 如果不是小写字母,就返回零(为假)

            1.1.2 isupper

            #include #include int main(){    int ret=isupper('A')        return 0;}

            【说明】:

            • 字符类型是整型类型的子集,这里可以使用ASCII表达字符
            • 判断参数部分是否为大写字母
            • 如果是小写字母,就返回非零的整数(为真)
            • 如果不是小写字母,就返回零(为假)

              如果对于其他字符分类函数使用感兴趣,可以点击这次链接,经行查找搜索->[字符分类函数](scanf - C++ Reference (cplusplus.com))

              1.2字符转换函数

              C语言提供了以下两个字符转换函数:

              int tolower(int c)功能:将参数部分为小写转化为大写int toupper (int C)功能:将参数部分为大写转化为小写
              int main(){    int ret=iolower('A');    printf("%d",ret);//这里打印出的就是小写a    return 0;}

              1.3 字符分类函数与字符转换函数配合

              int main(){int i = 0;char str[] = "Test String.\n";char c;while (str[i++]){c = str[i];if (islower(c))c = toupper(c);putchar(c);}return 0;}

              二、 字符串函数

              2.1 Strlen

              int main(){    char * p = "abcd";    int ret = strlen(p);    return 0;}

              【说明】:

              • 计算字符串在

                2.2 Strcpy

                前面出现的字符个数
              • 具体细节,参考这篇文【指针篇5/5】
              • 将原字符串(source)拷贝到目标字符串(destination)。
                • int main(){    cosnt char pc[] = "abcdf";    1. char p[] = "xxx";  //目标空间缺乏    2. char p[] = "XXXXXXxxxx"; //目标空间充足    strcpy(p, pc);    printf("%s", p);    return 0;}
                • 返回值是返回目标字符串中首地址。
                • 源字符必须以'
                • 源字符串中的'
                • 目标字符串是可修改的
                • '拷贝到目标空间'作为结束标志

                  【说明】:

                  • 目标空间需要足够大,不然可能会溢出
                  • 2.3 Strcat

                  • 在目标字符串末尾’
                    int main(){   char p[20] = "abcdefl";   const char pc[] = "xxxx";   strcat(p, pc,);   printf("%s", p);   return 0;}
                    ’的位置上追加源字符串。
                  • 源字符必须以'
                  • 目标字符串需要'
                  • 目标字符串是可修改的
                  • '作为结束标志,作为追加位置'作为结束标志
                  • 如果目标空间过小,虽然能打印结果,但会冲出缓冲区

                    2.4 Strcmp

                      int main(){    char p[20] = "abcdef";    char pc[20] = "abcf";    int ret=strcmp(p, pc);    if (ret > 0)    {        printf("大于");    }    else if (ret == 0)    {        printf("等于");    }    else    {        printf("小于");    }    return 0;}
                    • 目标字符串的首地址。
                    • 如果第一个字符串大于第二个字符串的大小,就返回大于0的数
                    • 【说明】:

                      • 如果第一个字符串等于第二个字符串的大小,就返回0
                      • 对于strcpy和strcat越界的调整

                        2.5 Strncpy

                      • 目标空间需要足够大,空间容纳下两个字符串连接后的大小
                      • 将源字符串的num个字符拷贝到目标空间中
                        • strcmp不是比较字符串的长度,而是比较两个字符串中对应位置字符的ASCII码值

                          2.6 Strncat

                          【说明】:

                          • 将源字符串的num个字符追加到目标空间中
                          • 2.7 Strncmp

                          • 如果第一个字符串小于第二个字符串的大小,就返回小于0的数
                          • 比较dest和str的前num个字符,如果在num前发现了不同,则返回数值,不再继续
                          • 【问题】:

                            • 在使用字符串函数中,strcpy和strcat都存在冲出缓冲区的风险,对此有什么办法可以尽量避免?

                              库为了对应这种情况的发生,提供了在strcpy和strcat基础上改良了可以控制个数的函数。


                              2.8 Strstr

                              【说明】:

                                int main(){      char str1[] = "abccdefg";    char str2[] = "cd";    char *ret=strstr(str1,str2);    printf("%s",ret);    return 0;}
                              • 如果num大于源字符串的数量,拷贝完源字符串后,以后追加'\0'直到num个才停下
                              • str1和str2不能为NULL.
                              • 【说明】:

                                  2.9 Strtok

                                • 如果num大于源字符串的数量,则拷贝到'\0'直接停下
                                  int main(){char str[] = "192.152.142@dads";char sep[] = ".@";char* p = NULL;for (p = strtok(str, sep); p != NULL; p=strtok(NULL, sep))//循环中利用上面返回值三点的相关知识{printf("%s\n", str);}     return 0;}

                                  【说明】:

                                  • 第一个参数不为NULL,则函数找到str1的第一个标记并且记录当下标记的位置
                                  • 如果dest和str相等,一直到了num个字符都相等,则返回0
                                  • 第一个参数为NULL,则从标记的位置,出发寻找下一个标记位置
                                    • 在字符串中寻找匹配子字符串并且返回子字符串的地址
                                    • 如果字符串中找不到更多的标记,则返回NULL.
                                    • 【说明】:

                                      • 因为使用一次strtok函数,只能找个一个标记点,所以我们需要用到循环
                                      • 如果str2不属于str1的字符串,则返回NULL.
                                      • 字符串中找不到更多的标记,则返回NULL,这个作为结束条件
                                        • 第一个参数指向一个字符串,包括了一个及多个的分隔符和字符组合

                                        • ​ 第二个参数是指向分割符的集合

                                        • 将一个字符串拆分标记,标记是由分隔符分割由任何字符分隔的连续字符串序列

                                          2.10 Strerror

                                          【说明】:

                                          1. 在不同的系统和C语言标准库的实现中将这一些错误码的信息,一般都放在头文件中
                                          2. 当C语言程序启动的时候,会有一个全面变量errno去记录程序中错误码,在程序启动的是时候,errno为0,表示没有错误。
                                          3. #include #include #include int main(){    FILE*p=fopen("add.txt","r");//r的意思打开文件进行输入操作。该文件必须存在。    //FILE * fopen ( const char * filename, const char * mode );    if(p==NULL)    {        perror("Error opening file add.txt:")//Error opening file add.txt: No such file or directory    }    return 0;}

                                          【循环体逻辑说明】

                                          • strtok函数会找下一个标记,以\0来结尾,返回指向这个标记的指针(strtok会改变被操作的字符串,所以strtok函数分割得到的字符串,一般是拷贝内容是可以被修改的)
                                            • 获得参数部分的错误码对应的错误信息

                                            • 将错误信息的字符串地址返回

                                              #include #include int main(){    for (int i = 0; i   

                                              【说明】

                                              • 如果在使用标准库中的函数,出现错误,那么就有会由errno去记录错误码,如果错误码是=的数字,不知道什么含义**?所以每一个错误码都对应着错误信息**

                                                讲到这里我们也是可以了解下perror函数,它的功能是直接将错误信息打印出来,比较暴力


上一篇:怎么做光泽字体?

下一篇:安装ug怎么输入服务器?