• c语言中常用的字符串处理函数总结



    前言

    c语言中常用的字符串处理函数总结。


    一、strlen函数使用

    1、 使用

    strlen函数返回的是在字符串中的个数,但不包含字符串结束符’\0’

    #include
    #include
    int main()
    {
            char str1[] = "abcdef";
            printf("%ld\n", strlen(str1));
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    执行
    ```cpp
    # gcc strlen.c  -o strlen
    ./strlen
    6
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、实现方法

    #include
    #include
    size_t Strlen_char(const char* str1)
    {
    	size_t len = 0;
    	while (*str1 != 0)
    	{
    		len++;
    		str1++;
    	}
    	return len;
    }
    int main()
    {
    	char* str1 = "abcdef";
    	printf("%ld\n", Strlen_char(str1));
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    执行

    # gcc strlen.c  -o strlen
    ./strlen
    6
    
    • 1
    • 2
    • 3

    二、strcpy函数使用

    1、使用

    原型:

    char *strcpy(char * destination, const char *source );
    
    • 1

    strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,estination的空间必须>=source的空间

    #include
    #include
    int main()
    {
    	char p1[] = "abcde";
    	char* p2  = "hello";
    	strcpy(p1, p2);
    	printf("%s\n", p1);
    	printf("%s\n", p2);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    执行

    # gcc strcpy.c  -o strcpy
    #  ./strcpy
    hello
    hello
    
    • 1
    • 2
    • 3
    • 4

    2、实现方法

    #include
    #include
    void stringcpy(char* char1 , const char *char2){
    	while(*char2){
    		*char1 = *char2;
    		char1++;
    		char2++;
    		//验证添加char1 = '\0';
    		if(*char2=='\0'){
    			printf("退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符");
    			printf("\n");
    		}
    	}
    	*char1 = '\0';//添加char1 = '\0';
    }
    
    int main()
    {
    	char   str1[5] = "abcde";
    	const char* p  = "hello";
    	stringcpy(str1, p);
    	printf("%s\n", str1);
    	printf("%s\n", p);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    执行

    $ gcc strcpy.c  -o strcpy
    $ ./strcpy
    退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符
    hello
    hello
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、strcat函数使用

    1、使用

    原型:

    char *strcat ( char * destination, const char * source );
    
    • 1

    strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容

    #include
    #include
    int main()
    {
    	char    p1[20] = "Hello";
    	const char* p2 = "World";
    	strcat(p1, p2);
    	printf("%s\n",p1);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    $ gcc strcat.c  -o strcat
    $ ./strcat
    HelloWorld
    
    • 1
    • 2
    • 3

    2、实现方法

    #include
    #include
    void stringcat(char *str1,const char *str2){
    	while(*str1){
    		str1++;
    	}//str1结束循环,当前是str1的存放值是'\0'
    	if(*str1=='\0'){
    		while(*str2){
    		*str1 = *str2;//str2的首个字符 W,替换赋值当前是str1的存放值是'\0'
    		str1++;
    		str2++;
    	    }
    	   str1='\0';	
    	}
    }
    int main()
    {
    	char    p1[20] = "Hello";
    	const char* p2 = "World";
    	stringcat(p1, p2);
    	printf("%s\n",p1);
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    执行

    
    $ gcc strcat.c  -o strcat
    $ ./strcat
    HelloWorld
    
    • 1
    • 2
    • 3
    • 4

    四、strcmp函数使用

    原型

    int strcmp ( const char * str1, const char * str2 );
    
    • 1

    strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCII码比较
    规定:
    第一个字符串大于第二个字符串,则返回大于0的数字
    第一个字符串等于第二个字符串,则返回0
    第一个字符串小于第二个字符串,则返回小于0的数字

    注意:strcmp函数比较两字符串的大小,和字符串本身长度无关

    1、使用

    #include
    #include
    int main()
    {
    	char* p1 = "abc";
    	char* p2 = "abc";
    	char* p3 = "abcd";
    	char* p4 = "e";
    	printf("----------------------\n");
    	printf("           %d\n", strcmp(p1,p2 ));
      	printf("----------------------\n");
    	printf("           %d\n", strcmp(p2,p3));  
    	printf("           %d\n", strcmp(p3,p2)); 
    	printf("----------------------\n");
    	printf("           %d\n", strcmp(p3,p4));//ASCII   'a' - 'e' =  97 - 101 = -4
    	printf("           %d\n", strcmp(p4,p3)); //ASCII  'a' - 'e' =  101 - 4  =  4
    	printf("           %d\n", 'a');
    	printf("           %d\n", 'e');
    
    } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    执行

    $ gcc strcmp.c  -o strcmp
    $ ./strcmp
    ----------------------
               0
    ----------------------
               -100
               100
    ----------------------
               -4
               4
               97
               101
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、实现方法

    #include<stdio.h>
    #include<string.h>
    int Strintcmp(const char * str1, const char * str2)
    {
        //1、两个不同的字符串比较时,直接 return (*str1-*str2);//返回两字符相减的ASCII码值
    	//2、字符串相同时进入while循环,字符串结束符是'\0',添加一个循环的结束条件!(*str1|*str2)=='\0')
    	while ((*str1 == *str2)&&(!(*str1|*str2)=='\0')){
    		str1++;
    		str2++;
    	}
      return (*str1-*str2);//返回两字符相减的ASCII码值
    }
    
    int main()
    {
    	char* p1 = "abc";
    	char* p2 = "abc";
    	char* p3 = "abcd";
    	char* p4 = "e";
    	printf("----------------------\n");
    	printf("           %d\n", Strintcmp(p1,p2 ));
      	printf("----------------------\n");
    	printf("           %d\n", Strintcmp(p2,p3));  
    	printf("           %d\n", Strintcmp(p3,p2)); 
    	printf("----------------------\n");
    	printf("           %d\n", Strintcmp(p3,p4));  
    	printf("           %d\n", Strintcmp(p4,p3)); 
    	printf("           %d\n", 'a');
    	printf("           %d\n", 'e');
    
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    执行

    $ gcc strcmp.c  -o strcmp
    $ ./strcmp
    ----------------------
               0
    ----------------------
               -100
               100
    ----------------------
               -4
               4
               97
               101
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    五、strlwr函数(大写转小写)使用

    1、使用

    #include 
    #include 
    #include  
    int main()
    {
            char    p1[20] = "HELLO";
            printf("转化前:%s\n",p1);
            strlwr(p1);
            printf("转化后:%s\n",p1);
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行后打印

    转化前:HELLO
    转化后:hello
    
    • 1
    • 2

    2、实现方法

    #include 
    #include 
    #include 
    void mystrlwr(char *p)
    {
     while(*p)
     {
       if('A'<=*p && *p<='Z')
       {
         *p=*p+'a'-'A';
       }
       p++;
     }
    }
    int main()
    {
            char    p1[20] = "HELLO";
            printf("转化前:%s\n",p1);
            mystrlwr(p1);
            printf("转化后:%s\n",p1);
            return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    执行

    
    $ gcc strlwr.c -o strlwr -static
    $ ./strlwr
    转化前:HELLO
    转化后:hello
    
    • 1
    • 2
    • 3
    • 4
    • 5

    六、strupr函数(小写转大写)使用

    1、使用

    #include 
    #include 
    #include  
    int main()
    {
            char    p1[20] = "hello";
            printf("转化前:%s\n",p1);
            strupr(p1);
            printf("转化后:%s\n",p1);
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行后打印

    转化为小写前:hello
    转化为小写后:HELLO
    
    • 1
    • 2

    2、实现方法

    
    #include 
    #include 
    #include 
    void mystrupr(char *p)
    {
     while(*p)
     {
       if('a'<=*p && *p<='z')
       {
         *p=*p+'A'-'a';
       }
       p++;
     }
    }
    int main()
    {
            char    p1[20] = "hello";
            printf("转化为前:%s\n",p1);
            mystrupr(p1);
            printf("转化为后:%s\n",p1);
            return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    执行

    
    $ gcc mystrupr.c -o mystrupr-static
    $ ./mystrupr
    转化为小写前:hello
    转化为小写后:HELLO
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    C++中的继承
    基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(三)
    LeetCode【78. 子集】
    MFC上下文菜单与定时器学习笔记
    [附源码]Python计算机毕业设计Django健身房信息管理
    int和Interger区别
    【线性代数】线性代数的几何意义
    首届COLM顶会:见证NLP领域的又一里程碑
    I/O性能与可靠性
    自然语言处理 Paddle NLP - 开放域对话系统-理论
  • 原文地址:https://blog.csdn.net/qq_38312843/article/details/128137177