C 语言之字符串处理函数一 -2016.01.01

大家呢都知道我们在写程序的时候从终端接受的内容实际上都是字符串,无论整型数据还是浮点型数据,那么字符串的操作就变得尤为重要,而我们常用的字符串操作无外乎基于:字符串的匹配、字符串的查找、字符串的分割、字符串的复制、字符串的连接、字符串的比较等一系列操作。那么今天就让我们来体验一下C语言为我们所提供的这些函数。各个函数的具体功能详见下面。为了能够让大家更好的理解我们可以看下面的程序。
Strtok(char* , char):将字符串以分隔符的方式分割,返回第一个分割所得地址,第一次分割时需加上第一个参数,以后就不需要再加第一个参数了,直接以NULL代替即可,它的每一次调用都返回分割的第Ni个的地址;
Strcmp(char* , char*):比较大小,对大小写敏感;
Strcasecmp(char* , char*):比较大小,对大小写不敏感;
Strncasecmp(char* , char* ,int ): 比较大小,对大小写不敏感,另外课指定对前n个字符进行大小比较;
Strcoll(char* , char*);比较大小,对大小写敏感;另外,会根据LO_LOCAL环境变量的值进行规律性的大小比较;
Strcpy(char* , char*):复制函数,将第二个参数的值复制到第一个里面,会把第二个参数最后的“\0”页复制过去;
Strncpy(char* , char*, int): 复制函数,将第二个参数的前n个值复制到第一个里面,不会把第二个参数最后的“\0”页复制过去,若需全部复制,应指定n等于strlen(第二个参数)+1;
Strcat(char* , char*):拼接函数,将第二个参数拼接到第一个参数后面,自动补0;
Strncat(char* , char*, int): 拼接函数,将第二个参数的钱n个拼接到第一个参数后面,自动补0;
Strdup(char*):首先会调用malloc函数分配和参数大小一样的空间,然后将数据复制过去,租后返回所得空间的地址;
Strchr(char* , char):返回第二个参数在第一个参数中首次出现的位置;
Strrchr(char* , char): 返回第二个参数在第一个参数中最后一次出现的位置;
Strpbrk(char* , char*):返回第二个参数和第一个参数第一次出现相同字符的位置;
Strstr(char* , char*):字符串匹配,返回第二个参数第一次出现在第一个参数中的位置;
Strlen(char*):返回字符串的长度;
Strspn(char* , char*);返回第一个参数从头开始连续在第二个参数中出现的字符个数;
Strcspn(char* , char*):返回第一个参数中从头开始连续在第二个参数中没有出现的字符个数;
以上函数的头文件都为<string.h>,但是如下三个的头文件是<ctype.h>
Toupper(char):将参数转换为大写;
Tolower(char):将参数转换为小写;

Toascii(char)将参数转换为ascii码;

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "ctype.h"

void cmp()

{

    printf("---------------------------------字符串比较函数---------------------------------\n");

    char a[] = "BSLbaishilei" ; 

    char b[] = "bslbaishilei" ;

    char c[] = "bslbaia989ds" ;

    printf("用于测试的变量 a = %s\n",a);

    printf("用于测试的变量 b = %s\n",b);

    printf("用于测试的变量 c = %s\n",c);

    if(strcmp(a,b)==0)

    printf("strcmp()执行结果: a[] -> %s 等于 b[] -> %s\n",a,b);

    else if(strcmp(a,b)>0)

    printf("strcmp()执行结果: a[] -> %s 大于 b[] -> %s\n",a,b);

    else if(strcmp(a,b)<0)

    printf("strcmp()执行结果: a[] -> %s 小于 b[] -> %s\n",a,b);

    //--------------------------------------------------------------------------

    if(strcasecmp(a,b)==0)

    printf("strcasecmp()执行结果: a[] -> %s 等于 b[] -> %s\n",a,b);

    else if(strcasecmp(a,b)>0)

    printf("strcasecmp()执行结果: a[] -> %s 大于 b[] -> %s\n",a,b);

    else if(strcasecmp(a,b)<0)

    printf("strcasecmp()执行结果: a[] -> %s 小于 b[] -> %s\n",a,b);

    //--------------------------------------------------------------------------

    if(strncasecmp(a,c,7)==0)

    printf("strncasecmp()执行结果: a[] -> %s 等于 c[] -> %s\n",a,c);

    else if(strncasecmp(a,c,7)>0)

    printf("strncasecmp()执行结果: a[] -> %s 大于 c[] -> %s\n",a,c);

    else if(strncasecmp(a,c,7)<0)

    printf("strncasecmp()执行结果: a[] -> %s 小于 c[] -> %s\n",a,c);

    //--------------------------------------------------------------------------

    if(strcoll(a,c)==0)

    printf("strcoll()执行结果: a[] -> %s 等于 c[] -> %s\n",a,c);

    else if(strcoll(a,c)>0)

    printf("strcoll()执行结果: a[] -> %s 大于 c[] -> %s\n",a,c);

    else if(strcoll(a,c)<0)

    printf("strcoll()执行结果: a[] -> %s 小于 c[] -> %s\n",a,c);

}

 

void change()

{

    printf("---------------------------------字符串转换函数---------------------------------");

    char a[] = "abcDEF012" ;

    printf("用于测试的变量 a = %s\n",a);

    printf("\ntoupper()执行结果:");

    for(int i = 0 ; i < strlen(a) ; i ++)

    printf("%c",toupper(a[i]));

    //--------------------------------------------------------------------------

    printf("\ntolower()执行结果:");

    for(int i = 0 ; i < strlen(a) ; i ++)

    printf("%c",tolower(a[i]));

    //--------------------------------------------------------------------------

    printf("\ntoascii()执行结果:");

    for(int i = 0 ; i < strlen(a) ; i ++)

    printf("%c->%d  ",a[i],toascii(a[i]));

    printf("\n");

}

 

void cpy()

{

    printf("---------------------------------字符串转换函数---------------------------------\n");

    char a[]="bsl" ;

    char b[]="baishilei" ;

    char c[30] ;

    char *p ;

    printf("用于测试的变量 a = %s\n",a);

    printf("用于测试的变量 b = %s\n",b);

    printf("用于测试的变量 c = %s\n",c);

    strcpy(c,a);

    printf("strcpy(c,a)执行结果:c = %s\n",c);

    strcat(c,b);

    printf("strcat(c,b)执行结果:c = %s\n",c);

    //--------------------------------------------------------------------------

    strncpy(c,b,3);

    printf("strncpy(c,b,3)执行结果:c = %s\n",c);

    strncat(c,a,3);

    printf("strncat(c,b,3)执行结果:c = %s\n",c);

    //--------------------------------------------------------------------------

    strncpy(c,a,4);

    printf("strncpy(c,a,4)执行结果:c = %s\n",c);

    //--------------------------------------------------------------------------

    p = strdup(a);

    printf("strdup(a)执行结果:*p = %s\n",p);

}

 

void knief()

{

     printf("---------------------------------字符串分割函数---------------------------------\n"); 

     char a[] = "a-b-c-d ; d-e ,,, ! f-g ---edf --- " ;

     char *p ;

     printf("strtok()执行之前:s = %s\n",a);

     printf("strtok()执行之后:s = %s",strtok(a,"-"));

     while( p = strtok(NULL,"-"))

            printf("%s",p);

     printf("\n");

}

 

void spn()

{

     printf("---------------------------------字符串计算函数---------------------------------\n");

     char a[] = "bslj012kh" ;

     char b[] = "0123456789baslk" ;

     char c[] = "jh012mn" ;

     printf("用于测试的变量 a = %s\n",a);

     printf("用于测试的变量 b = %s\n",b);

     printf("用于测试的变量 c = %s\n",c);

     printf("strspn(a,b)的执行结果:%d\n",strspn(a,b));

     printf("strcspn(c,b)的执行结果:%d\n",strcspn(c,b));

}

 

void find()

{

     printf("---------------------------------字符串查找函数---------------------------------\n");

     char a[] = "bslbaishilei" ;

     char b[] = "hahaha" ;

     char c[] = "shi";

     printf("用于测试的变量 a = %s\n",a);

     printf("用于测试的变量 b = %s\n",b);

     printf("用于测试的变量 c = %s\n",c);

     printf("strchr(a,'i')执行结果:%s\n",strchr(a,'i'));

     printf("strrchr(a,'i')执行结果:%s\n",strrchr(a,'i'));

     printf("strpbrk(a,b)执行结果:%s\n",strpbrk(a,b));

     printf("strstr(a,c)执行结果:%s\n",strstr(a,c));

}

 

int main(int argc,char* argv)

{

    cmp();   

    change();

    cpy();

    knief();

    spn();

    find();

    printf("-------------------------------------Ending-------------------------------------\n");

    system("pause");

    return 0 ;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值