字符串簡介
* 在Java中,一個字符串可以用String類型來存儲
String s = "MJ";
C語言中沒有String這種類型。其實字符串就是字符序列,由多個字符組成,所以在C語言中,我們可以用字符數組來存儲字符串。
* 字符串可以看做是一個特殊的字符數組,為了跟普通的字符數組區分開來,應該在字符串的尾部添加了一個結束標志'\0'。
'\0'是一個ASCII碼值為0的字符,是一個空操作符,表示什麼也不干。所以采用字符數組存放字符串,賦值時應包含結束標志'\0'。
* 字符串"mj"的存儲情況如下(假設用字符數組char a[]來存儲):char a[] = {'m', 'j', '\0'};
注意了,尾部有個'\0',如果沒有這個結束標記,說明這個字符數組存儲的並不是字符串
字符串的初始化
char a[3] = {'m', 'j', '\0'};
char b[3];
b[0] = 'm';
b[1] = 'j';
b[2] = '\0';
char c[3] = "mj"; //“”初始化時,系統會自動在字符串尾部加上一個\0結束符
char d[] = "mj";
char e[20] = "mj";
使用‘’初始化時,一定記得加‘\0’,
字符串數組簡介
* 一維字符數組中存放一個字符串,比如一個名字char name[20] = "mj"
* 如果要存儲多個字符串,比如一個班所有學生的名字,則需要二維字符數組,char names[15][20]可以存放15個學生的姓名(假設姓名不超過20字符)
* 如果要存儲兩個班的學生姓名,那麼可以用三維字符數組char names[2][15][20]
字符串數組的初始化
char names[2][10] = { {'J','a','y','\0'}, {'J','i','m','\0'} };
char names2[2][10] = { {"Jay"}, {"Jim"} };
char names3[2][10] = {"Jay","Jim" };
字符輸出函數putchar
putchar(65); // A
putchar('A'); // A
int a = 65;
putchar(a); // Aputchar一次只能輸出一個字符
字符輸入函數getchar
char c;
c = getchar();
* getchar函數可以讀入空格、TAB,直到遇到回車為止。scanf則不能讀入空格和TAB。
* getchar一次只能讀入一個字符。scanf則可以同時接收多個字符。
* getchar還能讀入回車換行符,這時候你要敲2次回車鍵。第1次敲的回車換行符被getchar讀入,第2次敲的回車鍵代表輸入結束。
strlen函數 返回字符串長度不包括 \0, 計算時直到 \0為止
int size = strlen(“aab”);
strcpy函數
char s[10];
strcpy(s,"lmj");將右邊的"lmj"字符串拷貝到字符數組s中 直到拷貝到\0為止 在s的尾部肯定會保留一個\0
strcat函數
char s[20] = “hello”; // 將右邊的字符串拼接到 s的尾部,連接完畢後在s的尾部保留一個\0
strcmp函數
兩個字符串從左至右逐個字符比較(按照字符的ASCII碼值的大小),直到字符不相同或者遇見'\0'為止。如果全部字符都相同,則返回值為0。
如果不相同,則返回兩個字符串中第一個不相同的字符ASCII碼值的差。即字符串1大於字符串2時函數返回值為正,否則為負。
strcmp(s1, “abd”);
puts函數 輸出一個字符串後自動換行,一次只能輸出一個字符串到‘\0’結束
char a[]={‘a’,’b’,’\0’}; puts(a); puts(“ab”);
gets函數
系統會自動在尾部加上一個結束標記\0
char a[10];
gets(a); 一次只能讀取一個字符串 ,scanf 讀取可以多個
gets可以讀入包含空格、tab的字符串,直到遇到回車為止;scanf不能用來讀取空格、tab
gets與scanf混用時發現:先gets再scanf沒事,若先scanf再gets則gets不執行了,因為先gets表示第1個就是屬於它的
scanf函數
char a[10];系統會自動在尾部加上一個結束標記\0
scanf("%s", a);因為a代表它的地址,所以不需要寫成&a
scanf(“%f”, &a); scanf(“%d, %s,%f”, &a,&b,&c); 接收多個時,分隔符可以是任意符號
包括空格、tab、回車