C 語(yǔ)言中的字符串函數(shù)
C 語(yǔ)言中的字符串雖然不是一種獨(dú)立的數(shù)據(jù)類(lèi)型,但是這并不影響其重要地位,所以在 C 語(yǔ)言中會(huì)有一些專(zhuān)門(mén)針對(duì)字符串的函數(shù)。
1. 字符串函數(shù)
字符串函數(shù)是專(zhuān)門(mén)用來(lái)進(jìn)行字符串操作的。C 語(yǔ)言提供了一個(gè)標(biāo)準(zhǔn)的函數(shù)庫(kù) string.h
。在這個(gè)函數(shù)庫(kù)中大致存在了 22 個(gè)字符串的函數(shù)。我們這里所介紹的字符串函數(shù)是來(lái)自于這個(gè)標(biāo)準(zhǔn)函數(shù)庫(kù)中比較常用的的一部分函數(shù)。除了這個(gè)函數(shù)庫(kù),還會(huì)有第三方的函數(shù)庫(kù)提供的字符串的一些函數(shù)。這些不在本教程的討論范圍內(nèi)。
常用的字符串函數(shù)包含一下幾個(gè):
序號(hào) | 函數(shù) | 功能 |
---|---|---|
1 | strlen(str1) | 獲取 str1 字符串的長(zhǎng)度 |
2 | strcpy(str1,str2) | 將 str2 中的內(nèi)容復(fù)制到 str1 中 |
3 | strcat(str1,str2) | 將 str2 連接到 str1 的后面 |
4 | strcmp(str1,str2) | 比較兩個(gè)字符串,如果兩個(gè)字符串一致則返回 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ì)的字符串的大小是包含空格和符號(hào)的。但是不包含字符數(shù)組中的最后一個(gè)表示字符串結(jié)束的 \0
字符。
比較字符串的大小其實(shí)是比較其里面字符編碼的數(shù)值大小求差值,所以兩個(gè)相同的字符差值是 0 ,如果前面的字符編碼值小于后面的,那么就會(huì)出現(xiàn)負(fù)值,反之就是一個(gè)正值。。但是具體的比較方式留在這里大家通過(guò)嘗試不同的值猜測(cè)一下。
拷貝字符串,就是將一個(gè)真的復(fù)制生成一個(gè)副本。而不是如同我們之前提及的使用數(shù)組給函數(shù)傳遞參數(shù)的時(shí)候一樣,只是傳遞的函數(shù)本體,而不是副本。因此你在復(fù)制字符串完成后,即使修改了原有字符串,也不會(huì)影響到新生成的字符串。
字符的查找與字符串的查找基本是類(lèi)似的,通過(guò)示例可以看出,我們通過(guò)字符查找 o
那么會(huì)返回第一個(gè)出現(xiàn) o
的位置的指針,而通過(guò)字符串查找,只有完全匹配字符的情況下才返回指針,所以會(huì)跳過(guò)字符查找出現(xiàn)的位置,繼續(xù)查找,直到找到 our
這個(gè)字符串。
拼接字符串就是將兩個(gè)字符串拼接,這里同樣需要注意。前面是數(shù)組大小要足夠大,可以容納被拼接的字符串,否則會(huì)出現(xiàn)問(wèn)題。
3. 小結(jié)
字符串的應(yīng)用非常廣泛,所以在 C 語(yǔ)言的標(biāo)準(zhǔn)函數(shù)庫(kù)中,提供了相關(guān)的支持。這里我們只是介紹了標(biāo)準(zhǔn)函數(shù)庫(kù)中的大約四分之一的常用函數(shù)的使用。這些函數(shù)的使用中,請(qǐng)大家記住字符串是由字符數(shù)組組成這一特性,在拼接,復(fù)制等等操作的時(shí)候,確認(rèn)目標(biāo)數(shù)組的大小是不是可以足夠的位置裝載相關(guān)的元素。