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 ;

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章