C 語言中的字符串函數(shù)
C 語言中的字符串雖然不是一種獨(dú)立的數(shù)據(jù)類型,但是這并不影響其重要地位,所以在 C 語言中會有一些專門針對字符串的函數(shù)。
1. 字符串函數(shù)
字符串函數(shù)是專門用來進(jìn)行字符串操作的。C 語言提供了一個標(biāo)準(zhǔn)的函數(shù)庫 string.h
。在這個函數(shù)庫中大致存在了 22 個字符串的函數(shù)。我們這里所介紹的字符串函數(shù)是來自于這個標(biāo)準(zhǔn)函數(shù)庫中比較常用的的一部分函數(shù)。除了這個函數(shù)庫,還會有第三方的函數(shù)庫提供的字符串的一些函數(shù)。這些不在本教程的討論范圍內(nèi)。
常用的字符串函數(shù)包含一下幾個:
序號 | 函數(shù) | 功能 |
---|---|---|
1 | strlen(str1) | 獲取 str1 字符串的長度 |
2 | strcpy(str1,str2) | 將 str2 中的內(nèi)容復(fù)制到 str1 中 |
3 | strcat(str1,str2) | 將 str2 連接到 str1 的后面 |
4 | strcmp(str1,str2) | 比較兩個字符串,如果兩個字符串一致則返回 0;如果 str1 大于 str2 則返回正數(shù);如果 str1 小于 str2 則返回負(fù)數(shù) |
5 | strchr(str1,shar1) | 在 str1 中查找字符 char1 第一次出現(xiàn)的位置,返回該位置的指針 |
|6|strstr(str1.str2)| 在 str1 中查找字符串 str2 第一次出現(xiàn)的位置,返回該位置的指針 |
2. 示例程序
#include <stdio.h>
#include <string.h>
int main()
{
char a[100] = "Welcome to our wiki!";
char b[] = "It is a interest place.";
char c[20] = "";
printf("string length = %lu\n", strlen(a));
printf("Compare a to a : %d\n", strcmp(a, a));
printf("Compare a to b : %d\n", strcmp(a, b));
printf("Compare b to a : %d\n", strcmp(b, a));
printf("Before copy : %s\n", c);
strcpy(c, a);
printf("After copy : %s\n", c);
char *pchar;
pchar = strchr(a, 'o');
printf("Character : %s\n", pchar);
pchar = strstr(a, "our");
printf("String : %s\n", pchar);
strcat(a, b);
printf("After concatenate strings : %s\n", a);
return 0;
}
運(yùn)行結(jié)果:
string length = 20
Compare a to a : 0
Compare a to b : 14
Compare b to a : -14
Before copy :
After copy : Welcome to our wiki!
Character : ome to our wiki!
String : our wiki!
After concatenate strings : Welcome to our wiki!It is a interest place.
在示例程序中,我們展示了常用的字符串函數(shù)的使用。在獲取字符串大小的函數(shù)中,我們統(tǒng)計(jì)的字符串的大小是包含空格和符號的。但是不包含字符數(shù)組中的最后一個表示字符串結(jié)束的 \0
字符。
比較字符串的大小其實(shí)是比較其里面字符編碼的數(shù)值大小求差值,所以兩個相同的字符差值是 0 ,如果前面的字符編碼值小于后面的,那么就會出現(xiàn)負(fù)值,反之就是一個正值。。但是具體的比較方式留在這里大家通過嘗試不同的值猜測一下。
拷貝字符串,就是將一個真的復(fù)制生成一個副本。而不是如同我們之前提及的使用數(shù)組給函數(shù)傳遞參數(shù)的時候一樣,只是傳遞的函數(shù)本體,而不是副本。因此你在復(fù)制字符串完成后,即使修改了原有字符串,也不會影響到新生成的字符串。
字符的查找與字符串的查找基本是類似的,通過示例可以看出,我們通過字符查找 o
那么會返回第一個出現(xiàn) o
的位置的指針,而通過字符串查找,只有完全匹配字符的情況下才返回指針,所以會跳過字符查找出現(xiàn)的位置,繼續(xù)查找,直到找到 our
這個字符串。
拼接字符串就是將兩個字符串拼接,這里同樣需要注意。前面是數(shù)組大小要足夠大,可以容納被拼接的字符串,否則會出現(xiàn)問題。
3. 小結(jié)
字符串的應(yīng)用非常廣泛,所以在 C 語言的標(biāo)準(zhǔn)函數(shù)庫中,提供了相關(guān)的支持。這里我們只是介紹了標(biāo)準(zhǔn)函數(shù)庫中的大約四分之一的常用函數(shù)的使用。這些函數(shù)的使用中,請大家記住字符串是由字符數(shù)組組成這一特性,在拼接,復(fù)制等等操作的時候,確認(rèn)目標(biāo)數(shù)組的大小是不是可以足夠的位置裝載相關(guān)的元素。