標籤:c library 軟體開發 linux 函數
需求開發中經常會用到很字串操作的函數,現整理常用函數如下:
函數名: strcpy
功 能: 拷貝一個字串到另一個
用 法: char *strcpy(char *destin, char *source);
樣本如下:
<span style="font-size:24px;">#include <stdio.h>#include <string.h>int main(){ char desstr[10]; char *srcstr = "abcdefg"; strcpy(desstr,srcstr); printf("%s\n",desstr);}</span>
函數名: strcat
功 能: 字串拼接函數
用 法: char *strcat(char *destin, char *source);
程式例:
<pre name="code" class="cpp">#include <stdio.h>#include <string.h>int main(){ char temstr [50] = {0}; char *desstr = "123456"; char *srcstr="789"; char *temp = NULL; strcpy(temstr,desstr); strcat(temstr,srcstr); temp = strchr(temstr,'7'); printf("%s",temp);}
函數名: strchr
功 能: 在一個串中尋找給定字元的第一個匹配之處
用 法: char *strchr(char *str, char c);
說明:返回首次出現c的位置的指標,返回的地址是被尋找字串指標開始的第一個與Val相同字元的指標,如果s中不存在c則返回NULL。
程式例
#include <string.h>#include <stdio.h>int main(){ char temstr [50] = {0}; char *desstr = "123456"; char *srcstr="789"; strcpy(temstr,desstr); strcat(temstr,srcstr); printf("%s",temstr);}函數名: strcmp
功 能: 串比較
用 法: int strcmp(char *str1, char *str2);
看Asic碼,str1>str2,返回值 > 0;兩串相等,返回0
/*當s1<s2時,返回為負數當s1=s2時,傳回值= 0當s1>s2時,返回正數*/#include <stdio.h>#include <string.h>int main(){ char string[20]; char str[3][20]; int i; for(i=0;i<3;i++) gets(str[i]); if(strcmp(str[0],str[1])>0) strcpy(string,str[0]); else strcpy(string,str[1]); if(strcmp(str[2],string)>0) strcpy(string,str[2]); printf("\nThe largest string is%s\n",string); return0;}
函數名: strcspn
功 能: 在串中尋找第一個給定字元集內容的段
用 法: int strcspn(char *str1, char *str2);
函數說明:strcspn()從參數s 字串的開頭計算連續的字元, 而這些字元都完全不在參數reject 所指的字串中. 簡單地說, 若strcspn()返回的數值為n, 則代表字串s 開頭連續有n 個字元都不含字串reject 內的字元.返回值:返回字串s 開頭連續不含字串reject 內的字元數目
程式例:
#include <stdio.h>#include <string.h>int main(){ char *desstr = "holle ,hi 123"; char *srcstr=","; int relust = 0; relust = strcspn(desstr,srcstr); printf("%d",relust);}
函數名: strdup
功 能: 將串拷貝到建立的位置處
用 法: char *strdup(char *str);
功 能: 將串拷貝到建立的位置處strdup()在內部調用了malloc()為變數分配記憶體,不需要使用返回的字串時,需要用free()釋放相應的記憶體空間,否則會造成記憶體流失。
程式例:
#include <stdio.h> #include <string.h> #include <alloc.h> int main(void) { char *dup_str, *string = "abcde"; dup_str = strdup(string); printf("%sn", dup_str); free(dup_str); return 0; }
函數名: stricmp
功 能: 以大小寫不敏感方式比較兩個串
用 法: int stricmp(char *str1, char *str2);
程式例:
#include <string.h> #include <stdio.h> int main(void) { char *buf1 = "BBB", *buf2 = "bbb"; int ptr; ptr = stricmp(buf2, buf1); if (ptr > 0) printf("buffer 2 is greater than buffer 1n"); if (ptr < 0) printf("buffer 2 is less than buffer 1n"); if (ptr == 0) printf("buffer 2 equals buffer 1n"); return 0; }
函數名: strerror
功 能: 返回指向錯誤資訊字串的指標
用 法: char *strerror(int errnum);
指向錯誤資訊的指標(即:錯誤的描述字串)。
程式例:
#include<stdio.h>#include<string.h>#include<errno.h>#include<stdlib.h>int main(void){FILE*fp;externinterrno;char*message;if(NULL==(fp=fopen("/dev/dsp","r+"))){printf("errno=%d\n",errno);message=strerror(errno);printf("Mesg:%s\n",message);}exit(0);}/*輸出:error=2Mesg:No such file or direcory*/
函數名: strncmp
功 能: 串比較
用 法: int strncmp(char *str1, char *str2, int maxlen);
程式例:
/*strncmp函數是指定比較size個字元。也就是說,如果字串s1與s2的前size個字元相同,函數傳回值為0。此函數功能即比較字串str1和str2的前maxlen個字元。如果前maxlen位元組完全相等,傳回值就=0;在前maxlen位元組比較過程中,如果出現str1[n]與str2[n]不等,則依次比較str1和str2的前n位,設i(i<n)為兩字串首次的不同位,則返回(str1[i]-str2[i])。*/#include<string.h>#include<stdio.h>int main(void){char *buf1="aaabbb",*buf2="bbbccc",*buf3="ccc";int ptr;ptr=strncmp(buf2,buf1,3);if(ptr>0)printf("buffer2 is greater than buffer1\n");elseif(ptr<0)printf("buffer2 is less than buffer1\n");ptr=strncmp(buf2,buf3,3);if(ptr>0)printf("buffer2 is greater than buffer3\n");elseif(ptr<0)printf("buffer2 is less than buffer3\n");return(0);}
函數名: strncpy
功 能: 串拷貝
用 法: char *strncpy(char *destin, char *source, int maxlen);
可對比strcpy方法使用;
程式例:
#include <stdio.h> #include <string.h> int main(void) { char string[10]; char *str1 = "abcdefghi"; strncpy(string, str1, 3); /*string 中必須保證有足夠的空間儲存被拷貝進去的字串*/ string[3] = ''; printf("%sn", string); return 0; }
函數名: strnset
用 法:char*strnset(char*str,char ch,unsigned n);
功 能: 將一個字串中的前n個字元都設為指定字元ch
程式例:
#include<stdio.h>#include<string.h>int main(void){char string[55]="abcdefghijklmnopqrstuvwxyz";char letter='x';printf("stringbeforestrnset:%s\n",string);strnset(string,letter,13);printf("stringafterstrnset:%s\n",string);return 0;}
函數名: strpbrk
功 能: 在串中尋找給定字元集中的字元
用 法: char *strpbrk(char *str1, char *str2);
程式例:
#include <stdio.h> #include <string.h> int main(void) { char *string1 = "abcdefghijklmnopqrstuvwxyz"; char *string2 = "onm"; char *ptr; ptr = strpbrk(string1, string2); if (ptr) printf("strpbrk found first character: %cn", *ptr); else printf("strpbrk didn't find character in setn"); return 0; }
函數名: strstr
功 能: 在串中尋找指定字串的第一次出現
用 法: char *strstr(char *str1, char *str2);
程式例:
#include <stdio.h> #include <string.h> int main(void) { char *str1 = "Borland International", *str2 = "nation", *ptr; ptr = strstr(str1, str2); printf("The substring is: %sn", ptr); return 0; }
函數名: strtod
功 能: 將字串轉換為double型值
用 法: double strtod(char *str, char **endptr);
程式例:
/*strtod()會掃描參數nptr字串,跳過前面的空白字元,直到遇上數字或正負符號才開始做轉換,到出現非數字或字串結束時('\0')才結束轉換,並將結果返回。若endptr不為NULL,則會將遇到不合條件而終止的nptr中的字元指標由endptr傳回。參數nptr字串可包含加號或減號、小數點或E(e)來表示指數部分。如123.456或123e-2。*/#include<stdlib.h>#include<stdio.h>void main(){ char *endptr; char a[] = "12345.6789"; char b[] = "1234.567qwer"; char c[] = "-232.23e4"; printf( "a=%lf\n", strtod(a,NULL) ); printf( "b=%lf\n", strtod(b,&endptr) ); printf( "endptr=%s\n", endptr ); printf( "c=%lf\n", strtod(c,NULL) );}/*執行:1234a=12345.678900b=1234.567000endptr=qwerc=-2322300.000000*/函數名: strtol
功 能: 將串轉換為長整數
用 法: long strtol(char *str, char **endptr, int base);
程式例
#include <stdlib.h> #include <stdio.h> int main(void) { char *string = "87654321", *endptr; long lnumber; /* strtol converts string to long integer */ lnumber = strtol(string, &endptr, 10); printf("string = %s long = %ldn", string, lnumber); return 0; }
函數名: strupr
功 能: 將串中的小寫字母轉換為大寫字母
用 法: char *strupr(char *str);
程式例:
#include <stdio.h> #include <string.h> int main(void) { char *string = "abcdefghijklmnopqrstuvwxyz", *ptr; /* converts string to upper case characters */ ptr = strupr(string); printf("%sn", ptr); return 0; } 函數名: swab
功 能: 交換位元組
用 法: void swab (char *from, char *to, int nbytes);
程式例:
#include <stdlib.h> #include <stdio.h> #include <string.h> char source[15] = "rFna koBlrna d"; char target[15]; int main(void) { swab(source, target, strlen(source)); printf("This is target: %sn", target); return 0; }
當然還有很多歡迎補充!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【整理】C語言中常見的字串操作函數