zoukankan      html  css  js  c++  java
  • 字符串处理

    一.字符串处理函数

     1.strlen

      原型:int strlen(const char *str)

      功能:返回字符串的实际长度,不含''

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char str1[20] = "hello";
        char *str2 = "hello";
        printf("sizeof_str1 = %d
    ",sizeof(str1));    //20
        printf("sizeof_str2 = %d
    ",sizeof(str2));    //4
        printf("strlen_str1 = %d
    ",strlen(str1));    //5
        printf("strlen_str1 = %d
    ",strlen(str1));    //5
        return 0;
    } 

     2.strcpy

      原型:char *strcpy(char *dest,const char *src)  //第二个参数用const修饰表示只读

      功能:把src所指向的字符串复制到dest所指向的空间中,''也会拷贝

      返回值:返回dest字符串的首地址

     3.strncpy

      原型:char *strncpy(char *dest,const char *src,int num)

      功能:把src所指向的字符串的前num个复制到dest所指向的空间中,''不会拷贝

      返回值:返回dest字符串的首地址

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char dest1[20] = "123456789";
        char dest2[20] = "123456789";
        char dest3[20];
        char *src = "hello world";
        
        strcpy(dest1,src);
        printf("dest1 = %s
    ",dest1);    //hello world
        
        strncpy(dest2,src,5);
        printf("dest2 = %s
    ",dest2);    //hello6789
        
        dest2[5] = '';
        printf("dest2 = %s
    ",dest2);    //hello
        
        strncpy(dest3,src,5);
        printf("dest3 = %s
    ",dest3);    //hello……乱码,后面没有
        
        dest3[5] = '';
        printf("dest3 = %s
    ",dest3);    //hello
        return 0;
    } 

     4.strcat

      原型:char *strcat(char *str1,char *str2)

      功能:将str2连接到str1后面,''会一起拷贝过去

      返回值:返回str1字符串的首地址

     5.strncat

      原型:char *strncat(char *str1,char *str2,int num)

      功能:将str2前num个字母连接到str1后面,''会一起拷贝过去

      返回值:返回str1字符串的首地址

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char str1[20] = "hello";
        char str2[20] = "hello";
        char *src = "Kitty hello";
        
        strcat(str1,src);
        printf("str1 = %s
    ",str1);    //helloKitty hello
        
        strncat(str2,src,5);
        printf("str2 = %s
    ",str2);    //helloKitty
        return 0;
    }

     6.strcmp

      原型:int strcmp(char *str1,char *str2)

      功能:比较str和str2的大小

      返回值:相等返回0

          str1大于str2,返回>0

          str1小于str2,返回<0

     7.strncmp

      原型:int strncmp(char *str1,char *str2,int num)

      功能:比较str和str2前n个字符串的大小

      返回值:相等返回0

          str1大于str2,返回>0

          str1小于str2,返回<0

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char *str1 = "hello Kitty";
        char *str2 = "hello world";
        
        if(strcmp(str1,str2) == 0)
            printf("str1 = str2
    ");
        else if(strcmp(str1,str2) > 0)
            printf("str1 > str2
    ");
        else
            printf("str1 < str2
    ");
            
        if(strncmp(str1,str2,5) == 0)
            printf("str1 = str2
    ");
        else if(strncmp(str1,str2,5) > 0)
            printf("str1 > str2
    ");
        else
            printf("str1 < str2
    ");    
            
        return 0;
    }

     二.字符串变换函数

     1.strchr  字符匹配函数

      原型:char* strchr(const char *str,char ch)

      功能:在字符串str中查找字母ch出现的位置

      返回值:如果找到,返回第一次出现的ch地址

          如果未找到,返回NULL

     2.strstr  字符串匹配函数

      原型:char* strstr(const char *str1,char* str2)

      功能:在字符串str1中查找字符串str2出现的位置

      返回值:如果找到,返回第一次出现的str2地址

          如果未找到,返回NULL

     3.memset  空间设定含税

      原型:void* memset(void *str,char c,int n)

      功能:将str所指向的内存区的前n个全部用c填充,常用于清楚指定空间,比如数组或malloc的空间

      返回值:返回str的地址 

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[])
    {
        char str1[20] = "hello $#$ Kitty";
        char *str2 = NULL;
        
        memset(str1,'*',strlen(str1));
        printf("str1 = %s
    ",str1);    //str1 = ***************
            
        str2 = (char *)malloc(10*sizeof(char));
        memset(str2,0,10*sizeof(char));     
        printf("str2 = %s
    ",str2);    //str2 =
        free(str2);
        return 0;
    }

     4.atoi/atol/atof  字符串转换功能

      原型:int atoi(const char *str)

         long int atol(const char *str)

         double atof(const char *str)

      功能:将str所指向的数字字符串转化为int/long/doule

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[])
    {
        char str1[] = "12345",str2[]="56789",str3[]="123.456";
        int num1;
        long int num2;
        double num3;
        
        num1 = atoi(str1);
        num2 = atol(str2);
        num3 = atof(str3);
        
        printf("num1 = %d,num2 = %ld,num3 = %lf
    ",num1,num2,num3);    //num1 = 12345,num2 = 56789,num = 123.456000
        return 0;
    }

     5.strtok  字符串分割函数

      原型:char *strtok(char str[],const char *delim)

      功能:strtok()用来将字符串分割成一个个片段

      参数1:str指向欲分割的字符串

      参数2:delim则为分割字符串中包含的所有字符

        • 当strtok()在参数str的字符串中发现参数delim中包含的分割字符时,则会将该字符改为字符,当连续出现多个时只替换第一个为。

        • 在第一次调用时:strtok()必须给予参数str字符串,往后的调用则将参数str设置成NULL,每次调用成功则返回指向被分割出片段的指针。

        • 切割完之后原字符串发生了改变。

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char str1[] = "abc*!$def*fhnbh!cdsn$*cndsk$!*hbh$ncdcbd";
        char *str2 = "*!$";
        char *result[10];
        int i,num = 0;
        
        result[num] = strtok(str1,str2);
        while(result[num] != NULL)
        {
            num++;
            result[num] = strtok(NULL,str2);
        }
        for(i = 0;i < num;i++)
            printf("result[%d] = %s
    ",i,result[i]);
        printf("str1 = %s
    ",str1);    //*被替换成了,所以只输出了abc
        return 0;
    }
    
    // 输出结果:
    // result[0] = abc
    // result[1] = def
    // result[2] = fhnbh
    // result[3] = cdsn
    // result[4] = cndsk
    // result[5] = hbh
    // result[6] = ncdcbd
    // str1 = abc

    三.格式化字符串操作函数

    • int sprintf(char *buf,const char *format, ……);  //输出到buf指定的内存区域

        例如:char buf[20];

           sprintf(buf,"%d:%d:%d",2017,11,25);

    • int sscanf(const char *buf,const char *format, ……);  //从buf指定的内存区域中读入信息

        例如:int a,b,c;

           sscanf("2017:11:25","%d:%d:%d",&a,&b,&c);

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char buf[200];
        int a,b,c;
        
        sprintf(buf,"%d:%d:%d",2017,11,25);
        printf("buf = %s
    ",buf);    //buf = 2017:11:25
        
        sscanf("2017:11:25","%d:%d:%d",&a,&b,&c);
        printf("a = %d,b = %d,c = %d
    ",a,b,c);    //a = 2017,b = 11,c = 25
        return 0;
    }

    四.标准I/O库函数

     sscanf高级用法

      1.跳过数据:%*s或%*d

        例如:sscanf("1234 5678","%*d %s",buf);  //5678

      2.读指定宽度的数据:%[width]s

        例如:sscanf("12345678","%4s",buf);  //1234

      3.支持集合操作

        • %[a-z] 表示匹配a到z中任意字符(尽可能多的匹配)

        • %[aBc]匹配a、B、c中一员,贪婪性

        • %[^a]匹配非a的任意字符,贪婪性  //碰到a就结束

        • %[^a-z]表示读取除a-z以外的所有字符  //碰到小写字母就结束了

    #include <stdio.h>
    #include <string.h>
    
    int main(int argc,char *argv[])
    {
        char buf[200];
        
        sscanf("1234 5678","%*d %s",buf);
        printf("buf = %s
    ",buf);    //buf = 5678
        
        sscanf("12345678","%4s",buf);
        printf("buf = %s
    ",buf);    //buf = 1234
        
        sscanf("123abcABC","%[1-9a-z]",buf);
        printf("buf = %s
    ",buf);    //buf = 123abc
        
        sscanf("123abcABC","%[^A-Z]",buf);
        printf("buf = %s
    ",buf);    //buf = 123abc
        
        sscanf("123456 abcdef","%[^ ]",buf);
        printf("buf = %s
    ",buf);    //buf = 123456
        return 0;
    }
  • 相关阅读:
    设置了透明以后,会有严重残影
    “真正的工作不是说的天花乱坠”,Torvalds 说, “而是在于细节”(Torvalds 认为成功的项目都是99%的汗水和1%的创新)
    iOS和Android使用MQTT协议实现消息推送和即时通讯(替代XMPP,已经有TMS MQTT)
    avalonjs1.5 入门教程
    Grunt 之 Connect
    性能
    JQUERY省、市、县城市联动选择
    Meteor全栈开发平台
    微型工作流引擎设计
    微型工作流引擎-功能设计
  • 原文地址:https://www.cnblogs.com/lemongirl/p/7897028.html
Copyright © 2011-2022 走看看