C語言字符數組與字符串數組
在C語言中,字符數組和字符串數組實際上是同一種類型。字符串是由字符組成的字符數組,通常以空字符 '\\0' 結尾。C語言中的字符串是一種常見的數據類型。我們可以通過兩種方式定義字符數組跟字符串數組
char charArray[10]; // 定義一個包含10個字符的字符數組
char strArray[10] = "Hello"; // 定義并初始化一個字符串數組
常用函數之strlen()函數
strlen
是 C 語言中的一個字符串函數,用于計算字符串的長度,即字符串中字符的個數(注意它是不包括結尾的空字符 '\\0')。
函數原型如下:
size_t strlen(const char *str);
參數 str
是一個指向以空字符 '\\0' 結尾的字符串的指針。函數返回一個 size_t
類型的值,表示字符串的長度。
以下是一個使用 strlen
函數的示例代碼:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str[] = "Hello, World!";
size_t length = strlen(str);
printf("Length of the string: %zu\\n", length);
return0;
}
在上述示例中,我們定義了一個字符串 str
,并使用 strlen
函數計算字符串的長度,將結果保存在變量 length
中。最后,使用 printf
函數打印字符串的長度。
輸出結果為:
Length of the string: 13
注意,strlen
函數返回的長度不包括結尾的空字符 '\\0'。所以對于上述示例中的字符串 "Hello, World!",雖然實際占用的字符數為 13,但 strlen
函數返回的結果是 13,而不是 14。這是因為 C 語言中的字符串以空字符 '\\0' 結尾,作為字符串的結束標志。
5個字母+1個逗號 + 1個空格 + 5個字母+1個感嘆號 = 13個字節
常用函數之strcpy()函數
strcpy
是 C 語言中的一個字符串函數,用于將一個字符串復制到另一個字符串中。
函數原型如下:
char *strcpy(char *dest, const char *src);
參數 dest
是目標字符串的指針,src
是源字符串的指針。函數將源字符串的內容復制到目標字符串中,并返回指向目標字符串的指針。//后面的字符串被復制到前面的那個字符串 并返回指向的目標字符串指針
以下是一個使用 strcpy
函數的示例代碼:
#include < stdio.h >
#include < string.h >
int main(void)
{
char src[] = "Hello";
char dest[10];
strcpy(dest, src);
printf("Copied string: %s\\n", dest);
return0;
}
在上述示例中,我們定義了一個源字符串 src
,內容為 "Hello",以及一個目標字符串 dest
,大小為 10。使用 strcpy
函數將源字符串的內容復制到目標字符串中。最后,使用 printf
函數打印目標字符串的內容。
輸出結果為:
Copied string: Hello
注意,在使用 strcpy
函數時,需要確保目標字符串的緩沖區足夠大以容納源字符串的內容。否則,可能會導致緩沖區溢出的錯誤。此外,確保源字符串以空字符 '\\0' 結尾,以便 strcpy
函數正確復制整個字符串。
常用函數之strcmp()函數
strcmp
是 C 語言中的一個字符串函數,用于比較兩個字符串是否相等。
函數原型如下:
int strcmp(const char *str1, const char *str2);
參數 str1
和 str2
是兩個要比較的字符串的指針。函數返回一個整數值,表示比較結果的大小關系:
- 如果
str1
和str2
相等,則返回 0。 - 如果
str1
按字典順序小于str2
,則返回負數。 - 如果
str1
按字典順序大于str2
,則返回正數。
什么是按照字典排序呢?
按字典順序是一種基于字母或字符的比較方式,類似于字典中單詞的排列順序。在 C 語言中,字符串的比較操作是按照字典順序進行的。
字典順序比較的規則如下:
- 比較字符串中對應位置的第一個字符。
- 如果兩個字符不相等,那么根據它們的 ASCII 值來確定它們的大小關系。較小的字符被認為是在字典中 較早的位置 ,較大的字符被認為是在字典中 較后的位置 。
- 如果兩個字符相等,則繼續比較下一個字符,直到找到不相等的字符或遇到字符串的結尾(即遇到空字符 '\\0')。
- 如果其中一個字符串到達結尾而另一個字符串還有剩余字符,則被認為到達結尾的字符串較小。
以下是一些示例,幫助理解按字典順序比較字符串的結果:
- "apple" 按字典順序小于 "banana",因為 'a' 比 'b' 小。ASCII碼值小
- "cat" 按字典順序大于 "dog",因為 'c' 比 'd' 大。
- "hello" 按字典順序等于 "hello",因為每個對應位置的字符都相等。
- "open" 按字典順序大于 "office",因為在第一個字符 'o' 相等的情況下,第二個字符 'p' 比 'f' 大。
需要注意的是,字母的大小比較是基于其對應的 ASCII 值進行的。在 ASCII 編碼中,小寫字母的 ASCII 值比大寫字母的 ASCII 值大*。因此,在按字典順序比較字符串時,大寫字母會被認為是在相應小寫字母之前。*
理解按字典順序比較字符串的概念對于正確使用字符串比較函數(如 strcmp
)以及處理字符串排序等操作非常重要。
以下是一個使用 strcmp
函數的示例代碼:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0)
{
printf("Strings are equal.\\n");
}
elseif (result < 0)
{
printf("str1 is less than str2.\\n");
}
else
{
printf("str1 is greater than str2.\\n");
}
return0;
}
在上述示例中,我們定義了兩個字符串 str1
和 str2
,分別賦值為 "Hello" 和 "World"。使用 strcmp
函數比較這兩個字符串,并將結果保存在變量 result
中。然后根據比較結果打印相應的消息。
輸出結果為:
str1 is less than str2.
在此示例中,由于 "Hello" 按字典順序小于 "World",所以 strcmp
函數返回一個負數值,表明 str1
小于 str2
。根據返回的結果,我們輸出了相應的消息。
需要注意的是,strcmp
函數是區分大小寫的。如果要執行不區分大小寫的字符串比較,可以使用 strcasecmp
函數(在一些編譯器中可能稱為 _stricmp
)。
這是在dev的string.h一段代碼 它支持strcasecmp 以及_stricmp
#ifndef __CRT__NO_INLINE
__CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
__CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
#else
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif /* !__CRT__NO_INLINE */
常用函數之strcat()函數
strcat
是 C 語言中的一個字符串函數,用于將一個字符串連接到另一個字符串的末尾。
函數原型如下:
char *strcat(char *dest, const char *src);
參數 dest
是目標字符串的指針,src
是源字符串的指針。函數將源字符串的內容連接到目標字符串的末尾,并返回指向目標字符串的指針。
以下是一個使用 strcat
函數的示例代碼:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str1[20] = "Hello";
char str2[] = ", World!";
strcat(str1, str2);
printf("Concatenated string: %s\\n", str1);
return0;
}
在上述示例中,我們定義了一個目標字符串 str1
,大小為 20,并初始化為 "Hello"。然后,定義了一個源字符串 str2
,內容為 ", World!"。使用 strcat
函數將 str2
連接到 str1
的末尾,修改了 str1
的內容。最后,使用 printf
函數打印連接后的字符串。
輸出結果為:
Concatenated string: Hello, World!
strcat
函數會將源字符串的內容追加到目標字符串的末尾,并確保目標字符串以空字符 '\\0' 結尾。在示例中,str1
原先以空字符結尾,strcat
函數會將 str2
的內容從 str1
結尾處開始拷貝,覆蓋掉 str1
的空字符,并在連接的末尾添加一個新的空字符。
需要注意的是,在使用 strcat
函數時,確保目標字符串的緩沖區足夠大,以容納源字符串的內容和額外的空字符。否則,可能會導致緩沖區溢出的錯誤。
類似這樣的函數還有哪些呢?
除了這幾個常見的字符串函數外,C 語言還有許多其他常用的字符串函數。以下是一些高頻使用的字符串函數:
strcat
:用于將一個字符串連接到另一個字符串的末尾。strncat
:類似于strcat
,但是可以指定要連接的字符數。strcmp
:已經提到過,用于比較兩個字符串是否相等。strncmp
:類似于strcmp
,但是可以指定要比較的字符數。strcpy
:已經提到過,用于將一個字符串復制到另一個字符串中。strncpy
:類似于strcpy
,但是可以指定要復制的字符數。strchr
:在字符串中搜索指定字符的第一個出現位置,并返回指向該位置的指針。strrchr
:在字符串中搜索指定字符的最后一個出現位置,并返回指向該位置的指針。strstr
:在字符串中搜索指定子字符串的第一個出現位置,并返回指向該位置的指針。strtok
:將字符串分割成多個子字符串,使用指定的分隔符進行分割。sprintf
:將格式化的數據寫入字符串。sscanf
:從字符串中讀取格式化的數據。strlen
:已經提到過,用于計算字符串的長度。memset
:將指定的值復制到字符串的每個字符。memcpy
:將一個字符串的內容復制到另一個字符串。
這些函數是 C 語言中處理字符串時經常使用的函數,它們提供了廣泛的功能,可用于字符串操作、搜索、比較、復制等。了解和熟練使用這些函數對于處理字符串數據非常重要。建議在需要使用特定功能時,查閱相關函數的文檔并參考示例代碼以確保正確使用。
-
編碼器
+關注
關注
45文章
3639瀏覽量
134440 -
C語言
+關注
關注
180文章
7604瀏覽量
136713 -
ASCII
+關注
關注
5文章
172瀏覽量
35095
發布評論請先 登錄
相關推薦
評論