1. 字符串是什么?
存放字符(char)的數(shù)組稱為字符數(shù)組。在C語言中,使用NULL字符('\0')終止的一維字符數(shù)組被稱作字符串。
字符串的各個元素依次存放各個字符,字符串的變量名代表該數(shù)組的首地址。
2. 字符串怎么用?
2.1 聲明
- 語法
字符串初始化方式與普通數(shù)組一樣。char 字符串變量名[字符數(shù)量];
2.2 初始化
- 語法
字符串可以按照普通數(shù)組初始化方式初始化。
例如:char 字符串變量名[字符數(shù)量] = {字符1,字符2,....,'\0'};
注意字符串最后一個字符必須是char greeting[12] = {'H', 'e', 'l', 'l', 'o',' ','W','o','r','l','d','\0'};\0。
字符串有一種更加簡單的初始化寫法
或者char 字符串變量名[字符數(shù)量] = 字符串字面量;
例如:char 字符串變量名[] = 字符串字面量;
或者char greeting[12] = "Hello World";char greeting[] = "Hello World";
2.3 輸入輸出
字符串輸入輸出與數(shù)值是一樣的,使用函數(shù)scanf()和printf()。只是占位符不同,字符串格式占位符為%s。
例如:
#include <stdio.h>
int main(){
char str[1024];
printf("請輸入你的名字:");
scanf("%s",str);
printf("你好,%s\n",str);
}
2.4 訪問字符
字符串的訪問方式與數(shù)組數(shù)字是一樣的,按照索引/下標(biāo)方式訪問。

- 語法
例如:字符數(shù)組名[索引]// 打印首字符 printf("%c\n", greeting[0]); // 修改首字符 greeting[0] = 'F'; // 打印修改后的字符串 printf("%s\n",greeting);
2.5 遍歷
- 基本套路
for (int i=0; '\0' != str[i]; ++i){ // 依次生成字符數(shù)組索引 str[i] // 訪問數(shù)組的每一個字符 } - 示例
實現(xiàn)一個字符串縱向輸出
輸入
輸出Hello WorldH e l l o W o r l d
2.6 賦值
試一下
char s[]="Hello World";
char t[20];
t = s;
字符串賦值可以使用遍歷的方式
for(int i=0;'\0'!=s[i];++i){
t[i] = s[i];
}
更便捷的是使用函數(shù)strcpy()
strcpy(t,s);
字符串賦值注意事項
- 目標(biāo)字符串長度要大于等于源字符串長度。
- 目標(biāo)字符串結(jié)尾是
'\0'
有些時候,字符串聲明時沒有初始化,這時字符串里的值是隨機值。需要手動賦值。賦值方式如下所示:
char str[30];
for (int i=0; i<30; ++i){
str[i] = '\0';
}
3. 實踐
3.1 練習(xí)
- 統(tǒng)計
輸入字符串s,打印出字符串s的長度(不包含'\0')。
輸入字符串s和字符c,打印出字符c在字符串s中出現(xiàn)的次數(shù)。 - 查找
輸入字符串s和字符c,打印出c在字符串s中的第一次出現(xiàn)的位置(第一個字符位置為0,s不包含c返回-1)。
輸入字符串s和字符c,打印出c在字符串s中的最后一次出現(xiàn)的位置(第一個字符位置為0,s不包含c返回-1)。 - 替換
輸入字符串s、數(shù)字n和字符c,用字符c替換字符串s中n位置的字符,打印出替換結(jié)果。
輸入字符串s、字符c1和字符c2,用字符c2替換字符串s中c1,打印出替換結(jié)果。 - 逆序/反序
輸入字符串s,打印出字符串s的反序。LeetCode 344. 反轉(zhuǎn)字符串
輸入字符串s,判斷字符串是否是回文。 - 輸入一個年月日時分秒組成的數(shù)字,按照XXXX年XX月XX日XX時XX分XX秒打印出來。例如:輸入20190311180301,打印出2019年3月11日18時3分1秒。
3.2 實例
- 輸入身份證號,打印身份證中出生年月日和性別。
- 輸入身份證號,判斷身份證的合法性。
- 輸入身份證號,打印身份證的地區(qū)信息。
- 根據(jù)輸入信息,生成合法的身份證號。
- 隨機生成合法的身份證號。
身份證號原理
1 構(gòu)成

2 地址碼

詳細(xì)地址碼參考
3 出生日期碼

4 順序碼

5 校驗碼

6 校驗
