C語言入門(十六)之字串

2021-08-29 18:39:49 字數 4055 閱讀 2471

如何定義字串變數, 由於字串是同一種型別的資料組成,  並且是有序的。

而陣列就是用於儲存很多同一種型別的有序資料, 所以可以使用陣列來儲存字串。

注意: 字串變數和普通的字元陣列有一定的區別。

c語言規定, 字串必須以\0結尾(作為字串的結束符號), 所以字串變數的元素個數比字元陣列的元素個數多乙個 \0

char str1 = "lnj";

char str2 = ;

printf("str size = %lu\n", sizeof(str1));

printf("charvalues size = %lu\n", sizeof(str2));

輸出長度都為4

str size = 4

charvalues size = 4

如何輸出字串變數, %s。

str 陣列的名稱, 陣列的名稱就是陣列的位址。

%s的原理, 從傳入的"位址"開始逐個取出, 直到遇到"\0"位置。

如果定義乙個如下字元陣列。

char str2 = ; // 字元陣列

printf("str = %s\n", str2);

會輸出

str = x
需要明白的一點就是字串以\0結尾, 沒有\0就不是字串;

只要是用雙引號括起來的都是字串;

字串的本質就是陣列;

char str6 = "lnj";

str6[1] = 'y';

printf("%s", str6);

優點: 可以自動換行

缺點: 不可以自定義格式, 只能原樣輸出

char str = "lnj";

puts(str);

printf("-------\n");

scanf接收字串, 會以空格 , tab, 回車作為結束符號, 也就是說利用scanf接收字串時, 字串中不能出現空格, tab, 回車

// warning: this program uses gets(), which is unsafe.

// 如果使用gets接收字串, 系統會提示我們正在使用乙個不安全的方法接收字元

// 優點: 如果利用gets接收字串 , 可以在字串中輸入空格, tab

printf("請輸入乙個字串\n");

char buf2[10]; // lnj c

gets(buf2);

printf("buf = %s\n", buf2);

strlen的原理: 從傳入的位址開始逐個取出字串, 每取出乙個就讓計數器+1. 直到遇到\0為止

char str = "lnj cool";

size_t size = strlen(str); // 計算出來的結果不包括\0

printf("length = %lu\n", size);//輸出 length = 8

模擬strlen函式

int length = sizeof(str) / sizeof(str[0]);

int size = mystrlen2(str, length);

printf("length = %lu\n", size);

int mystrlen2(char str, int length)

}return count;

}

// 原理 : 首先遍歷第乙個字串,直到遇到\0為止, 然後取出第二個字串中的字元, 從\0的位置開始新增, 新增完畢之後再在最後新增乙個\0

char str1[7] = "lnj"; // l n j c o o l \0

char str2[10] = " cool";

printf("拼接前: %s\n", str1);

// dest : 目標 src : 源

// 將src中的資料拼接到dest後面

// 注意: 要想使用字串拼接函式, 那麼dest必須是乙個陣列, 並且陣列的長度必須大於拼接之後的長度 \

如果dest陣列的長度, 不能完全存放dest+src+\0, 那麼就會報錯

// strcat(str1, str2);

// char * 相當於dest const char * 相當於src size_t 需要拼接的個數

// 為了避免拼接之後超出str1的儲存範圍, 那麼可以動態計算str2中需要拷貝幾個到str1後面不會超出

// str1能夠存放的元素個數 - str1已經存放的個數 - \0

//計算str1中所剩容量

size_t length = sizeof(str1) / sizeof(str1[0]) - strlen(str1) - 1;

printf("length = %lu\n", length);

strncat(str1, str2, length);

printf("拼接後: %s\n", str1);

6、字串拷貝函式strcpy

char str1[4] = "lnj";

char str2 = "cool";

printf("拷貝前 : str1 = %s\n", str1);

// char * 目標, const char * 源

// strcpy函式會將源的資料拷貝到目標中, 並且會覆蓋掉目標中原有的資料

// 目標的容積必須能夠存放拷貝的資料, 如果容積不夠會報錯

// strcpy(str1, str2);

// char * 目標, const char * 源 size_t 需要拷貝幾個

// 注意: 拷貝操作是逐個替換, 拷貝了幾個就替換幾個

// str1能夠存放元素的個數 - 1是給\0留出位置

int length = sizeof(str1) / sizeof(str1[0]) - 1;

strncpy(str1, str2, length);

printf("拷貝後 : str1 = %s\n", str1);

7、字串比較函式strcmp

char str1 = "aac"; // a a

char str2 = "abc"; // a b

// strcmp它會對傳入的字串進行比較, 比較完畢之後會返回乙個整型的值給我們

// 如果該值等於0,那麼證明兩個字串相等

// 如果該值小於0, 那麼證明str1小於str2

// 如果該值大於0, 那麼證明str1大於str2

// strcmp的原理: 取出字串中的每乙個字元進行逐個比較, 如果發現不相等就不會繼續往下比較

int res = strcmp(str1, str2);

printf("res = %i\n", res);

// 編寫乙個函式char_contains(char str,char key), 如果字串str中包含字元key則返回數值1,否則返回數值0

// 給你乙個字串和乙個key, 要求從字串中找出key, 如果找到就返回1沒有找到就返回0

char str = "xiaomage";

char key = 'z';

int res = char_contains2(str, key);

printf("res = %i\n", res);

int char_contains2(char str,char key)

#include int main(int argc, const char * argv) 

char names2[2][20] =,}

return 0;

}

C語言入門 字串

在c語言中,沒有字串型資料,只能用字元陣列和字元指標來處理字串。如 char ca 10 或 char ca 10 或 char ca 10 hello 都表示ca這個字串中有10個字元 包括 0 後面多出的元素自動補 0。但是ca string 這樣的賦值語句是不合法的,後期賦值只能使用迴圈乙個乙...

C語言入門 字串

還是要繼續學習,每天給自己打氣。字元陣列 char word 這不是c語言的字串,不能用字串的方式做計算 char word 區別就是最後多了乙個0,這就成為了字串 以0 整數0 結尾的一串字元 0或 0 是一樣的,但和 0 不同 0標誌字串的結束,但它不是字串的一部分 計算字串長度的時候不包含這個...

c語言隨機生成字串 C語言快速入門 字串生成

假設我們現在正在開發一款文件管理類軟體。其中一項功能就是一次性建立多個名稱連續的資料夾,如icon1 icon2等等。整個名稱可以分作兩部分,前半部分是常量字串 icon 後半部分是編號字串。在使用迴圈語句生成名稱時,編號是數字,如果能將編號轉換為乙個字串,那麼我們就可以用strcat函式將兩部分組...