c語言中字符串與字符串?dāng)?shù)組詳解
字符串
- 用雙引號引起來的就是字符串,字符串由字符組成
- 字符串使用%s格式化輸出
- 字符串以\0結(jié)尾,沒有\(zhòng)0就不是字符串
- 只要是用雙引號括起來的都是字符串
- 字符串的本質(zhì)就是數(shù)組
注意: 字符串變量和普通的字符數(shù)組有一定的區(qū)別,C語言規(guī)定,字符串必須以\0結(jié)尾(作為字符串的結(jié)束符號),所以字符串變量的元素個數(shù)比字符數(shù)組的元素多一個\0
#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 // 字符串本質(zhì)就是一個字符數(shù)組,前提是末尾以\0結(jié)尾 char name1[] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n', '\0'}; printf("name1 --> %s\n", name1); // name1 --> zhangsan // 部分初始化中,沒有被初始化的元素默認(rèn)是0, \0 對應(yīng)的ASCII值是 0 char name2[9] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n'}; printf("name2 --> %s\n", name2); // name2 --> zhangsan // 字符串的本質(zhì)就是數(shù)組 char name3[] = "lisi"; printf("name3 --> %s \n", name3); // name3 --> lisi name3[0] = 'x'; printf("name3 --> %s \n", name3); // name3 --> xisi return 0; }
字符串輸出
字符串輸出可以使用printf 和 puts 進(jìn)行輸出,各有利弊
- 輸出字符串
- 使用printf的%s占位符輸出
- 弊端:如果想要換行,必須加上\n
- 優(yōu)點:可以自定義格式化需要的字符串,也就是可以按照我們需要的格式來輸出
- 使用puts函數(shù)進(jìn)行輸出
- 優(yōu)點:可以自動換行
- 缺點:不可以自定義格式,只能原樣輸出
// printf char str[] = “l(fā)isi”; printf(“name = %s!!!\n”, str); printf("-----\n"); // puts // 自動換行,只能原樣輸出 puts(str); printf("----\n");
#### 字符串輸入
字符串輸入可以使用 scanf 和 gets 進(jìn)行輸入,各有利弊
輸入字符串
- 使用scanf的%s占位符接收鍵盤輸入的字符串
- scanf 接收字符串,會以空格,tab,回車作為結(jié)束符號,利用scanf接收字符串時,字符串不能出現(xiàn)空格,tab,回車
- 使用gets接收字符串
// 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
字符串常用方法
計算字符串的長度
#include <stdio.h> #include <string.h> // 申明函數(shù) int stringLen(char value[]); int main(int argc, const char * argv[]) { char string[] = "zhangsan"; // 計算字符串的長度,不包括末尾\0的長度 // 調(diào)用系統(tǒng)內(nèi)置函數(shù)strlen 計算字符串的長度,需要先導(dǎo)入 string.h 頭文件 size_t length = strlen(string); // lenght --> 8 printf("lenght --> %lu\n", length); // 自定義計算字符串長度的函數(shù) int length2 = stringLen(string); printf("length2 --> %i\n", length2); // length2 --> 8 return 0; } // 自定義計算字符串長度的函數(shù) int stringLen(char value[]) { int count = 0; while (value[count] != '\0') { count ++; } return count; }
字符串拼接
使用內(nèi)置方法strcat進(jìn)行2個字符串拼接,將后者拼接到前者后面,前提是前者空余的長度要大于后者的長度,否則會報錯
使用內(nèi)置方法strncat進(jìn)行2個字符串拼接,可以指定將后者的前多少個字符與前者進(jìn)行拼接
// 字符串拼接 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 可以指定將后者的前多少個字符與前者進(jìn)行拼接 strncat(str1, str2, 3); // 最后一個參數(shù)3表示指定str2的前多少個字符拼接到str1后面 printf("str1拼接后 --> %s\n", str1); // str1拼接后 --> hello world wo printf("str2拼接后 --> %s\n", str2); // str2拼接后 --> world
字符串拷貝
strcpy 函數(shù)會將源的數(shù)據(jù)拷貝到目錄中,并且會覆蓋掉目標(biāo)中原有的數(shù)據(jù),目標(biāo)的長度必須能夠存放拷貝的數(shù)據(jù),長度不夠會報錯
strncpy 函數(shù)在strcpy函數(shù)的基礎(chǔ)之上,增加一個參數(shù),可以指定拷貝幾個字符0
// 將str2中的內(nèi)容拷貝到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 函數(shù)在strcpy函數(shù)的基礎(chǔ)之上,增加一個參數(shù),可以指定拷貝幾個字符 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 會對傳入的字符串進(jìn)行比較,比較完畢后會返回一個整型的值
/* 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
字符串?dāng)?shù)組
如果想存儲一堆字符串可以使用字符串?dāng)?shù)組,字符串?dāng)?shù)組就是二維數(shù)組
char names[5][20] = { "zhangsan", "lisi", "wangwu", }
總結(jié)
到此這篇關(guān)于c語言中字符串與字符串?dāng)?shù)組的文章就介紹到這了,更多相關(guān)c語言字符串與字符串?dāng)?shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
函數(shù)外初始化與函數(shù)內(nèi)初始化詳細(xì)解析
函數(shù)內(nèi)初始化:bool FillStr(char *&szDst, int nSize);第一個參數(shù)中的&一定不能少,這是因為在函數(shù)外部我們只聲明了這個指針,具體這個指針指向內(nèi)存中的哪個地址我們并不知道,所以&是為了說明傳遞的是這個指針的引用,那么在函數(shù)內(nèi)初始化后這個指針的地址也就是外面指針的地址了2013-09-09關(guān)于C++中菱形繼承和虛繼承的問題總結(jié)
C++的三大特性為:封裝,繼承,多態(tài)。但是在繼承中,存在一些使用方面的問題需要注意,下面這篇文章主要給大家總結(jié)介紹了關(guān)于C++中菱形繼承和虛繼承的問題,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08C語言MFC導(dǎo)出dll回調(diào)函數(shù)方法詳解
這篇文章主要為大家介紹了C語言MFC導(dǎo)出dll回調(diào)函數(shù)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11