天天看點

C中字元串操作函數

C中字元串操作函數

  • strtok函數

    char *strtok(char *s, const char *delim);

    函數說明:strtok()用來将字元串分割成一個個判斷。參數s指向與分割的字元串,參數delim則為分割字元串,當strtok在參數s的字元串中發現到參數delim的分割字元時則會将該字元改為\0字元。在第一次調用時,strtok()必須基于參數s字元串,往後的調用則将參數設定為NULL。每次調用成功則傳回下一個分割後的字元串指針。

    傳回值:傳回一個分割後的字元串指針,如果已無從分割則傳回NULL。

  • strstr函數

    char *strstr(char *str, char *substr);

    函數說明:strstr()用來檢索子串在字元串中首次出現的位置。參數str為要檢索的字元串,substr為要檢索的子串。

    傳回值:傳回字元串str中第一次出現子串substr的位址;如果沒有檢索到子串,則傳回NULL。

  • strspn函數

    size_t strspn(const char *str, const char *accept);

    函數說明:strspn()從參數str字元串的開頭計算連續的字元,而這些字元都完全是accept所指字元串中的字元。即若strspn()傳回的數值為n,則代表字元串str開頭連續有n個字元都屬于字元串accept内的字元。

    傳回值:傳回字元串str開頭連續包含字元串accept内的字元數目。故如果str所包含的字元都屬于accept,那麼傳回str長度,如果str的第一個字元不屬于accept,傳回0。

  • strrchr函數

    char *strrchr(const char *str, int c);

    函數說明:strrchr()用于查找某個字元在字元串中最後一次出現的位置。參數str為要查找的字元串,c為要查找的字元。

    傳回值:如果找到就傳回該字元最後一次出現的位置,否則傳回NULL。

    注意:字元串str的結束标志NUL也會被納入檢索範圍,是以str的租後一個字元也可以被定位。

  • strpbrk函數

    char *strpbrk(char *s1, char *s2);

    函數說明:strpbrk()用于檢索兩個字元串中首個相同的字元的位置。從s1的第一個字元向後檢索,直到’\0’,如果目前字元存在于s2中,那麼傳回目前字元的位址,并停止檢索。

    傳回值:如果s1、s2含有相同的字元,那麼傳回指向s1中第一個相同字元的指針,否則傳回NULL。

    注意:strpbrk()不會對結束符’\0’進行檢索。

  • strncpy函數

    char *strncpy(char *dest, const char *src, size_t n);

    函數說明:strncpy()用來複制字元串的前n個字元。dest為目标字元串指針,src為源字元串指針。它會将字元串str前n個字元拷貝到字元串dest,不想strcpy(),strncpy()不會像dest追加結束标記’\0’,這會引發很多不合常理的問題。

    傳回值:傳回字元串dest。

    注意:src和dest所指的記憶體區域不能重疊,且dest必須有足夠的空間放置n個字元。

  • strncat函數

    char *strncat(char *dest, const char *src, size_t n);

    函數說明:strncat()用于将n個字元追加到字元串的結尾。它将會從字元串src的開頭拷貝n個字元到dest字元串尾部,dest要有足夠的空間來容納要拷貝的字元串。如果n大于字元串src的長度,那麼僅将src全部追加到dest尾部。它會将dest字元串最後的’\0’覆寫掉,字元追加完成後,在追加’\0’。

    傳回值:傳回字元串dest。

  • strncasecmp函數

    int strncasecmp(const char *s1, const char *s2, size_t n);

    函數說明:strncasecmp()用來比較參數s1和s2字元串前n個字元,比較時會自動忽略大小寫的差異。

    傳回值:若參數s1和s2字元串相同,則傳回0;s1若大于s2,則傳回大于0的值;s1若小于s2,則傳回小于0的值。

  • strlen函數

    unsigned int strlen(char *s);

    函數說明:strlen()用于計算字元串的長度,其中不包括結束字元’\0’。

    傳回值:傳回字元串s的字元數。

  • strdup函數

    char *strdup(const char *s);

    函數說明:strdup()會先用malloc()配置與參數s字元串相同的空間大小,然後将參數s字元串的内容複制到該記憶體位址,然後把該位址傳回。該位址最後可以利用free()來釋放。

    傳回值:傳回一字元串指針,該指針指向複制後的新字元串位址。若傳回NULL,表示記憶體不足。

  • strchr函數

    char *strchr(const char *str, int c);

    函數說明:strchr()将會找出str字元串中第一次出現的字元c的位址,然後将該位址傳回。

    傳回值:如果找到指定的字元則傳回該字元所在位址,否則傳回NULL。

    注意:字元串str的結束标志NUL也會被納入檢索範圍,是以str的組後一個字元也可以被定位。

  • strcspn函數

    int strcspn(char *str, char *accept);

    函數說明:strcspn()從字元串str的開頭計算連續的字元,而這些字元都完全不在字元串accept中。簡單地說,若strcspn()傳回的數值為n,則代表字元串str開頭連續有n個字元都不包含字元串accept中的字元。

    傳回值:傳回字元串str開頭連續不含字元串accept内的字元數目。

    注意:如果str中的字元都沒有在accept中出現,那麼将傳回str的長度;檢索的字元時區分大小寫的。

  • strcpy函數

    char *strcpy(char *dest, const char *src);

    函數說明:strcpy()會将參數src字元串拷貝至參數dest所指的位址。

    傳回值:傳回參數dest的字元串起始位址。

    注意:如果參數dest所指的記憶體空間不夠大,可能會造成緩沖溢出(buffer overflow)的錯誤情況。

  • strcoll函數

    int strcoll(const char *str1, const char *str2)

    函數說明:strcoll()函數根據環境變量LC_COLLATE所指定的文字排列次序來比較字元串。其中參數str1,str2是要進行比較的兩個字元串。預設情況下,LC_COLLATE為“POSIX”或“C”,strcoll()和strcmp()一樣根據ASCII比較字元串大小。對于設定了LC_COLLATE語言環境的情況下,則根據LC_COLLATE設定的語言排序方式進行比較。如漢子會根據拼音進行比較。

    傳回值:若字元串str1和str2相同則傳回0。若str1大于str2則傳回大于0的值,否則傳回小于0的值。

  • strcmp函數

    int strcmp(const char *s1, const char *s2);

    函數說明:strcmp()用來比較字元串(區分大小寫)。s1和s2為需要比較的兩個字元串。字元串大小的比較是以ASCII碼表上的順序來決定的,此順序亦為字元的值。strcmp()首先将s1第一個字元串減去s2第一個字元值,若內插補點為0,則再繼續比較下個字元,若內插補點不為0,則将內插補點傳回。

    傳回值:若參數s1和s2相同,則傳回0;若s1大于s2,則傳回大于0的值;若s1小于s2,則傳回小于0的值。

    注意:strcmp()以二進制的方式進行比較,不會考慮多位元組或寬位元組字元;如果考慮到本地化的需求,需使用strcoll()函數。

  • strcat函數

    char *strcat(char *dest, const char *src);

    函數說明:strcat()用于将參數src字元串複制到參數dest所指的字元串尾部,dest最後的結束字元NULL會被覆寫掉,并在連接配接後的字元串的尾部再增加一個NULL。

    傳回值:傳回dest字元串起始位址。

    注意:dest與src所指的記憶體空間不能重疊,且dest要有足夠的空間來容納要複制的字元串。

  • strcasecmp函數

    int strcasecmp(const char *s1, const char *s2);

    函數說明:strcasecmp()用來比較參數s1和s2字元串,比較時會自動忽略大小寫的差異。

    傳回值:若參數s1和s2字元串相同則傳回0;若s1長度大于s2長度則傳回大于0的值;若s1長度小于s2長度則傳回小于0的值。

  • rindex函數

    char *rindex(const char *s, int c);

    函數說明:rindex()用來找出參數s字元串中最後一個出現的參數c位址,然後将該字元出現的位址傳回。字元串結束字元NULL也被視為字元串一部分。

    傳回值:如果找到指定的字元則傳回該字元所在的位址,否則傳回0。

  • index函數

    char *index(const char *s, int c);

    函數說明:index()用來找出參數s字元串中第一個出現的參數c位址,然後将該字元出現的位址傳回。字元串結束字元(NULL)也視為字元串一部分。

    傳回值:如果找到指定的字元則傳回該字元所在位址,否則傳回0。

  • toupper函數

    int toupper(int c)

    函數說明:若參數c為小寫字母則将該對應的大寫字母傳回。

    傳回值:傳回轉換後的大寫字母,若不須轉換則将參數c值傳回。

  • tolower函數

    int tolower(int c);

    函數說明:若參數c為大寫字母則将該對應的小寫字母傳回。

    傳回值:傳回轉換後的小寫字母,若不須轉換則将參數c值傳回。

  • toascii函數

    int toascii(int c);

    函數說明:toascii()會将參數c轉換成7位的unsigned char值,第八位則會被清除,此字元即會被轉換成ASCII碼字元。

    傳回值:将轉換成功的ASCII碼字元值傳回。

  • strtoul函數

    unsigned long strtoul(const char *str, char **endptr, int base);

    函數說明:strtoul()會将參數str字元串根據參數base來轉換為無符号的長整型數(unsigned long)。參數base範圍從2至36,或0。參數base代表str采用的進制方式,如base值為10則采用10進制,若base值為16則采用16禁止數等。它會掃描參數str字元串,跳過前面的空白字元(如空格,tab縮進,可以用isspace()函數來檢測),直到遇上數字或正負号才開始做轉換,再遇到非數字或字元串結束時(’\0’)結束轉換,并将結果傳回。

    傳回值:傳回轉換後的無符号長整形數;如果不能轉換或者str為空字元串,那麼傳回0;如果轉換得到的值超出unsigned long int所能表示的範圍,函數将傳回ULONG_MAX(在limits.h中定義),并将errno的值設定為ERANGE。

    注意:1)當base的值為0時,預設采用10進制轉換,但如果遇到‘0x’或‘0X’前置字元這幅使用16進制轉換,遇到‘0’前置字元則會使用8進制轉換;2)若endptr不為NULL,則會将遇到的不同符合條件而終止的字元指針有endptr傳回;若endptr為NULL,則表示該參數無效,或不使用該參數。

  • strtol函數

    long int strtol(const char *str, char **endptr, int base);

    函數說明:strtol()會将參數str字元串根據參數base來轉換成長整型數(long)。參數base範圍從2至36,或0。參數base代表str采用的禁止方式,如base值為10則采用10進制,若base值為16,則采用16進制等。它會掃描參數str字元串,跳出前面的空白字元(如空格,tab縮進等,可以通過isspace()函數來檢測),直到遇到數字或正負符号才開始做轉換,在遇到非數字或字元串結果是‘\0’結束轉換,并将結果傳回。

    傳回值:傳回轉換後的長整型數;如果不能轉換或者str為空字元串,那麼傳回0(0L);如果轉換得到的值超出long int所能表示的範圍,函數傳回LONG_MAX或LONG_MIN(在limits.h頭檔案中定義),并将errno的值設定為ERANGE。

    注意:1)當base的值為0時,預設采用10進制轉換,但如果遇到‘0x’或‘0X’前置字元這幅使用16進制轉換,遇到‘0’前置字元則會使用8進制轉換;2)若endptr不為NULL,則會将遇到的不同符合條件而終止的字元指針有endptr傳回;若endptr為NULL,則表示該參數無效,或不使用該參數。

  • strtod函數

    double strtod(const char *str, char **endptr);

    函數說明:strtod()函數會掃描參數str字元串,跳過前面的空白字元(如空格,tab縮進,可以通過isspace()函數來檢測),直到遇上數字或正負符号才開始做轉換,到出現非數字或字元串結束時‘\0’才結束轉換,并将結果傳回。參數str字元串可包含正負号,小數點或E(e)來表示指數部分。如123.456或123e-2。若endptr不為NULL,則會将遇到的不符合條件而終止的字元串由endptr傳回;若endptr為NULL,則表示該參數無效,或不使用該參數。

    傳回值:傳回轉換後的浮點型數;若不能轉換或字元串為空,則傳回0.0。

  • gcvt函數

    char *gcvt(double number, size_t ndigits, char *buf);

    函數說明:gcvt()用來将參數number轉換成ASCII碼字元串,參數ndigits表示顯示的位數。gcvt()與ecvt()和fcvt()不同的地方在于,gcvt()所轉換後的字元串包含小數點或正負符号。若轉換成功,轉換後的字元串會放在參數buf指針所指的空間。

    傳回值:傳回一字元串指針,此位址為buf指針。

  • atol函數

    long atol(const char *str);

    函數說明:atol會掃描參數str字元串,跳過前面的空白字元(如空格,tab縮進等,可以isspace()函數來檢測),直到遇上數字或正負符号才開始做轉換,而再遇到非數字或字元串結束時‘\0’才結束轉換,并将結果傳回。

    傳回值:傳回轉換後的長整型數long;如果str不能轉換成long或者str為空字元串,那麼将傳回0。

  • atoi函數

    int atoi(const char *str);

    函數說明:atoi()會掃描參數str字元串,跳過前面的空白字元(如空格,tab縮進,可以通過isspace()函數來檢測),直到遇上數字或正負符号才開始做轉換,而遇到非數字或字元結束時‘\0’才結束轉換,并将結果傳回。

    傳回值:傳回轉換後的整型數;如果str不能轉換為int或者str為空字元串,那麼将傳回0。

  • atof函數

    double atof(const char *str);

    函數說明:atof()用于将字元串轉換為雙精度浮點數(double)。它會掃描參數str字元串,跳過前面的空白字元串(如空格,tab縮進等,可以通過isspace()函數來檢測),直到遇上數字或正負符号才開始轉換,而再遇到非數字或字元串結束時‘\0’才結束轉換,并将結果傳回。參數str字元串可包含正負号、小數或E(e)來表示指數部分,如123.456或123e-2。

    傳回值:傳回轉換後的浮點數;如果字元串str不能被轉換為double,那麼傳回0.0。

繼續閱讀