C語言常用字串操作函式總結

li27z發表於2017-03-09
函式名: strcpy
功  能: 將引數src字串拷貝至引數dest所指的地址
用  法: char *strcpy(char *dest, const char *src);
返回值: 返回引數dest的字串起始地址
說  明: 如果引數dest所指的記憶體空間不夠大,可能會造成緩衝溢位的錯誤情況,在編寫程式時需特別留意,或者用strncpy()來取代;
程式例:

#include <stdio.h>
#include <string.h>

int main(void)
 {
    char string[10];
    char *str1 = "abcdefghi";

    strcpy(string, str1);
    printf("%s\n", string);  // 輸出:abcdefghi
    return 0;
 }
函式名: strncpy
功  能: 將字串src前n個字元拷貝到字串dest
用  法: char *strncpy(char *dest, const char *src, size_t n);
返回值: 返回引數dest的字串起始地址
說  明: 不像strcpy(),strncpy()不會向dest追加結束標記'\0';
       src和dest所指的記憶體區域不能重疊,且dest必須有足夠的空間放置n個字元;
程式例:

#include <stdio.h>
#include <string.h>

int main(void)
{
   char string[10];
   char *str1 = "abcdefghi";

   strncpy(string, str1, 3);
   string[3] = '\0';
   printf("%s\n", string);  // 輸出:abc
   return 0;
}
函式名: strcat
功  能: 字串拼接函式
用  法: char *strcat(char *dest, const char *src);
返回值: 返回dest字串起始地址
說  明: strcat() 會將引數src字串複製到引數dest所指的字串尾部;
       dest最後的結束字元'\0'會被覆蓋掉,並在連線後的字串的尾部再增加一個'\0';
       dest與src所指的記憶體空間不能重疊,且dest要有足夠的空間來容納要複製的字串;
程式例:

#include <string.h>
#include <stdio.h>

int main(void)
{
   char destination[25];
   char *blank = " ", *c = "C++", *Borland = "Borland";

   strcpy(destination, Borland);
   strcat(destination, blank);
   strcat(destination, c);

   printf("%s\n", destination);  // 輸出:Borland C++
   return 0;
}
函式名: strncat
功  能: 將n個字元追加到字串的結尾
用  法: char *strncat(char *dest, const char *src, size_t n);
返回值: 返回dest字串起始地址
說  明: strncat()將會從字串src的開頭拷貝n個字元到dest字串尾部,dest要有足夠的空間來容納要拷貝的字串;
       如果n大於字串src的長度,那麼僅將src全部追加到dest的尾部;
       strncat()會將dest字串最後的'\0'覆蓋掉,字元追加完成後,再追加'\0';
程式例:

#include<stdio.h>
#include<string.h>

int main()
{
    char url[100] = "http://blog.csdn.net";
    char path[30] = "/cpp/u/string/";
    strncat(url, path, 1000);  // 1000遠遠超過path的長度
    printf("%s\n", url);  // 輸出;http://blog.csdn.net/cpp/u/string/
    return  0;
}
函式名: strchr
功  能: 在一個字串中查詢給定字元的第一個匹配之處
用  法: char *strchr(const char *str, int c);
返回值: 如果找到指定的字元則返回該字元所在地址,否則返回NULL
說  明: 返回的地址是字串在記憶體中隨機分配的地址再加上你所搜尋的字元在字串的位置;
       字串str的結束標誌‘\0’也會被納入檢索範圍,所以str的最後一個字元也可以被定位;
       如果希望查詢某字元在字串中最後一次出現的位置,可以使用 strrchr() 函式;
程式例:

#include <stdio.h>
#include <string.h>

int main()
{
    char *s = "0123456789012345678901234567890";
    char *p;
    p = strchr(s, '5');  
    printf("%ld\n", s);  // 輸出:134513940
    printf("%ld\n", p);  // 輸出:134513945
    p = strrchr(s, '5');
    printf("%ld\n", p);  // 輸出:134513965
    return 0;
}
函式名: strcmp
功  能: 字串比較
用  法: int strcmp(const char *s1, const char *s2);
返回值: 根據ASCII碼比較,若引數s1和s2字串相同則返回0,s1若大於s2則返回大於0的值,s1若小於s2則返回小於0的值
說  明: 它是區分大小寫比較的,如果希望不區分大小寫進行字串比較,可以使用stricmp函式
程式例:

#include <string.h>
#include <stdio.h>

int main(void)
 {
    char *a = "aBcDeF";
    char *b = "AbCdEf";
    char *c = "aacdef";
    char *d = "aBcDeF";
    printf("strcmp(a, b) : %d\n", strcmp(a, b));  // 輸出:1
    printf("strcmp(a, c) : %d\n", strcmp(a, c));  // 輸出:-1
    printf("strcmp(a, d) : %d\n", strcmp(a, d));  // 輸出:0
    return 0;
 }
函式名: strlen
功  能: 計算指定的字串s的長度,不包括結束字元'\0'
用  法: size_t strlen(const char *s);
返回值: 返回字串s的字元數
說  明: strlen() 函式計算的是字串的實際長度,遇到第一個'\0'結束;
       如果你只定義沒有給它賦初值,這個結果是不定的,它會從首地址一直找下去,直到遇到'\0'停止;
       sizeof返回的是變數宣告後所佔的記憶體數,不是實際長度,此外sizeof不是函式,僅僅是一個操作符,strlen()是函式;
程式例:

#include<stdio.h>
#include<string.h>

int main()
{
    char str[5] = "abcd";
    printf("strlen(str)=%d, sizeof(str)=%d\n", strlen(str), sizeof(str));  // 輸出:strlen(str)=4, sizeof(str)=5
    return 0;
}
函式名: strspn
功  能: 用來計算字串str中連續有幾個字元都屬於字串 accept
用  法: size_t strspn(const char *str, const char * accept);
返回值: 返回字串str開頭連續包含字串accept內的字元數目。所以,如果str所包含的字元都屬於accept,那麼返回str的長度;如果str的第一個字元不屬於accept,那麼返回0
說  明: 檢索的字元是區分大小寫的;
       函式 strcspn() 的含義與 strspn() 相反,它用來用來計算字串str中連續有幾個字元都不屬於字串accept;
程式例:
(1)
#include <stdio.h>
#include <string.h>

int main ()
{
    int i;
    char str[] = "129th";
    char accept[] = "1234567890";

    i = strspn(str, accept);
    printf("str 前 %d 個字元都屬於 accept\n",i);  // 輸出:str 前 3 個字元都屬於 accept
    return 0;
}

(2)一個strcspn()的例子

#include<stdio.h>
#include<string.h>

int main()
{
    char* s1 = "http://c.biancheng.net/cpp/xitong/";
    char* s2 = "z -+*";

    if(strlen(s1) == strcspn(s1,s2)){
        printf("s1 is diffrent from s2!\n");  // 輸出:s1 is diffrent from s2!
    }else{
        printf("There is at least one same character in s1 and s2!\n");
    }
    return 0;
}
函式名: strerror
功  能: 返回指向錯誤資訊字串的指標
用  法: char *strerror(int errnum);
程式例:

#include <stdio.h>
#include <errno.h>

int main(void)
{
   char *buffer;
   buffer = strerror(errno);
   printf("Error: %s\n", buffer);  // 輸出:Error: Success
   return 0;
}
函式名: strtok
功  能: 根據分界符將字串分割成一個個片段
用  法: char *strtok(char *s, const char *delim);
返回值: 返回下一個分割後的字串指標,如果已無從分割則返回NULL
說  明: 當strtok()在引數s的字串中發現到引數delim的分割字元時則會將該字元改為'\0'字元;
       在第一次呼叫時,strtok()必須賦予引數s字串,往後的呼叫則將引數s設定成NULL;
程式例:

#include <stdio.h>
#include <string.h>

int main()
{
    char s[] = "ab-cd : ef";
    char *delim = "-: ";
    char *p;
    printf("%s \n", strtok(s, delim));
    // 輸出:ab
    //      cd
    //      ef
    while((p = strtok(NULL, delim)))
        printf("%s ", p);
        printf("\n");
}
函式名: strstr
功  能: 檢索子串在字串中首次出現的位置
用  法: char *strstr( char *str, char * substr );
返回值: 返回字串str中第一次出現子串substr的地址;如果沒有檢索到子串,則返回NULL
程式例:

#include<stdio.h>
#include<string.h>
int main(){
    char *str = "HelloWorldHelloWorld";
    char *substr = "World";
    char *s = strstr(str, substr);  
    printf("%s\n", s);  // 輸出:WorldHelloWorld
    return 0;
}
函式名: strpbrk
功  能: 返回兩個字串中首個相同字元的位置
用  法: char *strpbrk(char *s1, char *s2);
返回值: 如果s1、s2含有相同的字元,那麼返回指向s1中第一個相同字元的指標,否則返回NULL
說  明: strpbrk()不會對結束符'\0'進行檢索
程式例:

#include<stdio.h>
#include<string.h>

int main(){
    char* s1 = "see you again";
    char* s2 = "you";
    char* p = strpbrk(s1,s2);
    if(p){
        printf("The result is: %s\n",p);  // 輸出:The result is: you again  
    }else{
        printf("Sorry!\n");
    }
    return 0;
}
函式名: atoi
功  能: 將字串轉換成整數(int)
用  法: int atoi (const char * str);
返回值: 返回轉換後的整型數;如果str不能轉換成int或者str為空字串,那麼將返回0
說  明: ANSI C規範定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個可以將字串轉換為數字的函式,可以對比學習;
       另外在C99/C++11規範中又新增了5個函式,分別是 atoll()、strtof()、strtold()、strtoll()、strtoull();
程式例:

#include <stdio.h>
#include <string.h>

int main ()
{
    int i;
    char buffer[256];
    printf ("Enter a number: ");
    fgets (buffer, 256, stdin);
    i = atoi (buffer);
    printf ("The value entered is %d.", i);
    return 0;
}

相關文章