C語言經常使用字符串操做函數總結

C語言經常使用字符串操做函數總結函數

函數名: 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); 返回值: 若是s一、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; }
相關文章
相關標籤/搜索