字符串
- 用雙引號引起來的就是字符串,字符串由字符組成
- 字符串使用%s格式化輸出
- 字符串以\0結尾,沒有\0就不是字符串
- 只要是用雙引號括起來的都是字符串
-
字符串的本質就是數組
注意: 字符串變量和普通的字符數組有一定的區別,C語言規定,字符串必須以\0結尾(作為字符串的結束符號),所以字符串變量的元素個數比字符數組的元素多一個\0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h> int main( int argc, const char * argv[]) { char name[] = "zhangsan" ; // %u 表示無符號,sizeof 返回的是一個無符號長整型 printf ( "name --> %s size --> %lu\n" , name, sizeof (name)); // name --> zhangsan size --> 9 // 字符串本質就是一個字符數組,前提是末尾以\0結尾 char name1[] = { 'z' , 'h' , 'a' , 'n' , 'g' , 's' , 'a' , 'n' , '\0' }; printf ( "name1 --> %s\n" , name1); // name1 --> zhangsan // 部分初始化中,沒有被初始化的元素默認是0, \0 對應的ASCII值是 0 char name2[9] = { 'z' , 'h' , 'a' , 'n' , 'g' , 's' , 'a' , 'n' }; printf ( "name2 --> %s\n" , name2); // name2 --> zhangsan // 字符串的本質就是數組 char name3[] = "lisi" ; printf ( "name3 --> %s \n" , name3); // name3 --> lisi name3[0] = 'x' ; printf ( "name3 --> %s \n" , name3); // name3 --> xisi return 0; } |
字符串輸出
字符串輸出可以使用printf 和 puts 進行輸出,各有利弊
- 輸出字符串
- 使用printf的%s占位符輸出
- 弊端:如果想要換行,必須加上\n
- 優點:可以自定義格式化需要的字符串,也就是可以按照我們需要的格式來輸出
- 使用puts函數進行輸出
- 優點:可以自動換行
- 缺點:不可以自定義格式,只能原樣輸出
1
2
3
4
5
6
7
8
9
|
// printf char str[] = “lisi”; printf (“name = %s!!!\n”, str); printf ( "-----\n" ); // puts // 自動換行,只能原樣輸出 puts (str); printf ( "----\n" ); |
#### 字符串輸入
字符串輸入可以使用 scanf 和 gets 進行輸入,各有利弊
輸入字符串
-
使用scanf的%s占位符接收鍵盤輸入的字符串
- scanf 接收字符串,會以空格,tab,回車作為結束符號,利用scanf接收字符串時,字符串不能出現空格,tab,回車
- 使用gets接收字符串
1
2
3
4
5
6
7
8
9
10
11
12
|
// scanf printf ( "請輸入一個字符串:\n" ); char buf[10]; scanf ( "%s" , buf); // 輸入:fdsa fdas printf ( "buf --> %s\n" , buf); // buf --> fdsa // gets char buf[10]; printf ( "請輸入一個字符串,使用gets接收:\n" ); gets (buf); printf ( "buf --> %s\n" , buf); // buf --> fdsaf fdsa |
字符串常用方法
計算字符串的長度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <stdio.h> #include <string.h> // 申明函數 int stringLen( char value[]); int main( int argc, const char * argv[]) { char string[] = "zhangsan" ; // 計算字符串的長度,不包括末尾\0的長度 // 調用系統內置函數strlen 計算字符串的長度,需要先導入 string.h 頭文件 size_t length = strlen (string); // lenght --> 8 printf ( "lenght --> %lu\n" , length); // 自定義計算字符串長度的函數 int length2 = stringLen(string); printf ( "length2 --> %i\n" , length2); // length2 --> 8 return 0; } // 自定義計算字符串長度的函數 int stringLen( char value[]) { int count = 0; while (value[count] != '\0' ) { count ++; } return count; } |
字符串拼接
使用內置方法strcat進行2個字符串拼接,將后者拼接到前者后面,前提是前者空余的長度要大于后者的長度,否則會報錯
使用內置方法strncat進行2個字符串拼接,可以指定將后者的前多少個字符與前者進行拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 字符串拼接 char str1[20] = "hello" ; char str2[10] = " world" ; printf ( "str1拼接前 --> %s\n" , str1); // str1拼接前 --> hello printf ( "str2拼接前 --> %s\n" , str2); // str2拼接前 --> world strcat (str1, str2); printf ( "\n" ); printf ( "str1拼接后 --> %s\n" , str1); // str1拼接后 --> hello world printf ( "str2拼接后 --> %s\n" , str2); // str2拼接后 --> world // 使用 strncat 可以指定將后者的前多少個字符與前者進行拼接 strncat (str1, str2, 3); // 最后一個參數3表示指定str2的前多少個字符拼接到str1后面 printf ( "str1拼接后 --> %s\n" , str1); // str1拼接后 --> hello world wo printf ( "str2拼接后 --> %s\n" , str2); // str2拼接后 --> world |
字符串拷貝
strcpy 函數會將源的數據拷貝到目錄中,并且會覆蓋掉目標中原有的數據,目標的長度必須能夠存放拷貝的數據,長度不夠會報錯
strncpy 函數在strcpy函數的基礎之上,增加一個參數,可以指定拷貝幾個字符0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
// 將str2中的內容拷貝到str1中 char str1[20] = "hello" ; char str2[] = " world!" ; printf ( "str1 拷貝前 --> %s\n" , str1); // str1 --> hello printf ( "str2 拷貝前 --> %s\n" , str2); // str2 --> world! strcpy (str1, str2); printf ( "str1 拷貝后 --> %s\n" , str1); // str1 --> world! printf ( "str2 拷貝后 --> %s\n" , str2); // str2 --> world! // strncpy 函數在strcpy函數的基礎之上,增加一個參數,可以指定拷貝幾個字符 char str3[20] = "hello" ; char str4[] = "_world!" ; strncpy (str3, str4, 2); printf ( "str3 拷貝后 --> %s\n" , str3); // str3 拷貝后 --> _wllo printf ( "str4 拷貝后 --> %s\n" , str4); // str4 拷貝后 --> _world! |
字符串比較
strcmp 會對傳入的字符串進行比較,比較完畢后會返回一個整型的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/* int result = strcmp(str1, str2) 如果result等于0,證明兩個字符串相等 如果result小于0,證明str1小于str2 如果result大于0,證明str1大于str2 */ char str1[] = "abc" ; char str2[] = "abc" ; int result = strcmp (str1, str2); printf ( "result --> %i\n" , result); // result --> 0 char str1[] = "ab1" ; char str2[] = "abc" ; int result = strcmp (str1, str2); printf ( "result --> %i\n" , result); // result --> -50 char str1[] = "absadsa" ; char str2[] = "abc" ; int result = strcmp (str1, str2); printf ( "result --> %i\n" , result); // result --> 16 |
字符串數組
如果想存儲一堆字符串可以使用字符串數組,字符串數組就是二維數組
1
2
3
4
5
|
char names[5][20] = { "zhangsan" , "lisi" , "wangwu" , } |
總結
到此這篇關于c語言中字符串與字符串數組的文章就介紹到這了,更多相關c語言字符串與字符串數組內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/crazy_zhangcong/article/details/88112493