概要:本文介紹了字符串的概念、定義方法和常用的函數,並用實例加以串聯以說明字符串的用法。
一、 字符串
1.字符串的概念
字符串是位於雙引號中的字符序列。字符串即字符數組。
在內存中以“\0”結束,所佔字節比實際多一個
注意:
1. 可以把一個字符常量賦給一個字符變量,但不能把字符串常量賦給字符變量
2. C語言中沒有字符串變量,可以用字符數組來存放字符串
Printf("hello world!");
Char ch[10]="ab";
2.字符串的定義
定義格式:char 數組名[常量表達式]
例如:char c[10];
字符數組也可以是二維或多維數組。如:
char 數組名[常量表達式1][常量表達式2]
例如:char c[5][10]; 即爲二維字符數組。
注意:定義字符數組時,應確保數組長度比字符串長度至少多1(存放’\0’)
3.字符串初始化
1)定義同時進行初始化
char c[5]={'a','b','c','d'};
2)部分初始化
char d[10]={'a','b','c'};
3)先定義再初始化
char e[5];
e[0]='a';
e[1]='b';
二、字符串的使用
1.輸入輸出
1)printf和scanf
使用printf和scanf進行輸入和輸出時,需要用到%s佔位符,%s 從給定的地址開始,輸出字符直到遇到\0結束。應該說明的是,對一個字符數組,如果不做初始化賦值,則必須說明數組長度,還應該特別注意的是,當用scanf函數輸入字符串時,字符串中不能含有空格,否則將以空格作爲串的結束符。
char a[100];
printf("請輸入一個字符串\n");
scanf("%s",a);
printf("%s",a);
2)puts和gets
puts在輸出字符串時會自動換行,但與printf不同的是,puts不能進行格式化輸出。gets相對於scanf來說好處在於gets函數並不以空格爲字符串結束輸入的標誌,而只以回車作爲結束標誌。
char f[100];
gets(f);
puts(f);
但是scanf和gets缺點就在於若是用戶輸入了超過數組指定長度的字符串,程序將 報錯。
3)fputs和fgets
i) fgets
格式:fgets(數組名,數組長度,stdin)
fgets從輸入緩衝區讀取一個字符串保存到字符數組中,當輸入的字符串的長度大於數組的長度,此時fgets會自動的把數組的最後一個元素變成\0,當輸入的字符串的長度小於數組長度的時候,fgets還會接收回車。
ii) fputs
格式:fputs(數組名,stdout);
fputs是不會自動換行,也不能進行格式化的輸出,而puts 可以自動換行
4)幾種輸入輸出方式的比較
i) printf和scanf
優點:可以格式化輸出。
缺點:printf不能自動換行,scanf中不能有空格
ii) puts和gets
優點:gets可以接受空格
缺點:使用gets會有一個警告,並且當我們輸入的字符數大於字符串長度時程序會報錯。
iii) fputs和fgets
fgets()、fputs()最大的優點是幫我們自動截取輸入的字符串,使得我們對字符串 的存取是安全的。
2.其他字符串處理函數
下面將介紹幾個字符串的常用函數,介紹完概念之後,將用一個程序把所有函數的用法表現出來。
1)字符串連接函數 strcat
格式: strcat(字符數組名1,字符數組名2)
功能:把字符數組2中的字符串連接到字符數組1 中字符串的後面,並刪去字符串1後的串標誌 “\0”。本函數返回值是字符數組1的首地址。
本函數把初始化賦值的字符數組與動態賦值的字符串連接起來。要注意的是,字符數組1應定義足夠的長度,否則不能全部裝入被連接的字符串。
2)字符串拷貝函數strcpy
格式: strcpy(字符數組名1,字符數組名2)
功能:把字符數組2中的字符串拷貝到字符數組1中。串結束標誌“\0”也一同拷貝。字符數名2, 也可以是一個字符串常量。這時相當於把一個字符串賦予一個字符數組。
本函數要求字符數組1應有足夠的長度,否則不能全部裝入所拷貝的字符串。
3)字符串比較函數strcmp
格式: strcmp(字符數組名1,字符數組名2)
比較規則:
對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現不同的字符或遇到‘\0’爲止。如果全部字符相同,則認爲相等;若出現不相同的字符,則以第一個不相同的字符的比較結果爲準。
如果兩個字符串都由英文字母組成,則有一個簡單的規律:在英文字典中位置在後面的爲“大”,還要特別注意:小寫字母比大寫字母“大”。
返回值:
- (1)字符串1=字符串2,返回0
- (2)字符串1>字符串2,返回一個正整數
- (3)字符串1<字符串2,返回一個負整數。
本函數也可用於比較兩個字符串常量,或比較數組和字符串常量。
實例如下:
總結:字符串是一種日常編程經常會用到的類型,可以用來存儲各種信息,並對信息做一些處理,掌握好常用字符串函數,對於日後的編程學習很有用處!