如何定義字串變數, 由於字串是同一種型別的資料組成, 並且是有序的。
而陣列就是用於儲存很多同一種型別的有序資料, 所以可以使用陣列來儲存字串。
注意: 字串變數和普通的字元陣列有一定的區別。
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函式將兩部分組...