字符數組的輸入輸出
(1)逐個字符的輸入和輸出
字符數組的元素可以類似其他類型的數組一樣,逐個字符的輸入和輸出。
【例4-9】通過鍵盤輸入一個字符串,以Enter鍵結束,并將字符串在屏幕上輸出。
分析:處理字符數組和其他數組一致,可以利用循環逐個元素輸入,利用getchar()函數向元素讀入數據。
程序的算法流程圖如圖5-7所示。
圖5-7 例5-9算法流程圖
根據流程圖寫出的程序如下
#include <stdio.h>
int main()
{
int i;
char c[30];
for(i=0;i<30;i++)
{
c[i]=getchar(); /*逐個給數組元素賦值*/
if(c[i]=='\n') /*如輸入回車則終止循環*/
break;
}
i=0;
while(c[i]!='\n')/*逐個輸出字符數組的各個元素*/
printf("%c",c[i++]);
printf("\n");
return 0;
}
程序運行結果:
Hello world!↙
Hello world!
(2)整體輸入輸出
在采用字符串方式后,字符數組的輸入輸出將變得簡單方便。除了上述用字符串賦初值的辦法外,還可用printf函數和scanf函數格式符s或者利用整體輸入輸出函數gets()/puts()一次性輸出輸入一個字符數組中的字符串,而不必使用循環語句逐個地輸入輸出每個字符。
字符串輸出函數puts的格式為:
puts(字符數組名)
功能:把字符數組中的字符串輸出到顯示器。 即在屏幕上顯示該字符串。
字符串輸入函數gets的格式為:
gets (字符數組名)
功能:從標準輸入設備鍵盤上輸入一個字符串,本函數得到一個函數值,即為該字符數組的首地址。
例如有如下的字符數組定義:
char s1[50],s2[50];
向字符串s1和s2中輸入兩個字符串的兩種格式為:
scanf(“%s%s”,s1,s2);
gets(s1);gets(s2);
同樣輸出字符串s1和s2的兩種格式為:
printf("s1:%s,s2:%s\n",s1,s2);
puts(s1);puts(s2);
使用scanf()/printf()函數可以一次輸入或輸出多個不含有空白符的字符串,而使用gets/puts函數一次只能輸入或輸出一個字符串,但是字符串中可以包含字符。
【例5-10】不同字符的統計:用戶從鍵盤輸入一個字符串,當輸入回車時認為輸入結束,統計輸入字符串中的小寫英文字母、大寫英文字母、數字字符、其他字符的個數。
分析:可以聲明字符數組s,用于存放輸入的字符串??梢栽O4個變量或設置一個含4個元素的整型數組,用于存放輸入字符串中的小寫英文字母、大寫英文字母、數字字符、其他字符的個數。
程序的算法流程圖如圖5-8所示。
根據流程圖寫出的程序如下:
#include <stdio.h>
int main()
{
int i,count[4]={0,0,0,0};
char c[100];
printf("input a string:\n");
gets(c);/*字符串整體輸入*/
puts(c);
for(i=0;c[i]!='\0';i++)/*逐個訪問字符串中的元素*/
{
if(c[i]>='a'&&c[i]<='z')
count[0]++; /*判斷小寫英文字母*/
else if(c[i]>='A'&&c[i]<='Z')
count[1]++; /*判斷大寫英文字母*/
else if(c[i]>='0'&&c[i]<='9')
count[2]++; /*判斷數字字符*/
else
count[3]++; /*判斷其他字符*/
}
printf("a~z:%d\nA~Z:%d\n0-9:%d\nothers:%d\n",count[0],count[1],count[2],count[3]);
return 0;
}
程序運行結果:
input a string:
this is a Program.Hello World! 123.↙
this is a Program.Hello World! 123.
a~z:21
A~Z:3
0-9:3
others:8
例5-10算法流程圖
【例5-11】刪除字符串中指定字符,指定一個字符,刪除字符串中和該字符相同的字符。
分析:設定字符數組存放字符串,在字符數組中完成指定字符的刪除功能。首先輸入待刪除的字符,設定兩個下標訪問數組,第一個下標表示刪除以后的字符數組中含有的字符,第二個下標則訪問當前字符數組。如果當前字符不是帶刪除字符,兩個下標同時后移,否則只有第二個個下標后移,整個過程通過循環設計實現。
#include<stdio.h>
int main()
{
char st[]="I love C language";
int i,j;
char c;
printf("input character c:"); /*輸入一個字符*/
c=getchar();
for(i=j=0;st[i];i++)
if(st[i]!=c)
st[j++]=st[i];
st[j]='\0';
puts(st);
return 0;
}
程序運行結果:
Input character c:e↙
I lov C languag
利用for循環控制語句,循環變量i和j,初值為0,,i訪問當前數組,j訪問刪除以后的數組,如果當前數組沒有訪問到字符串的末尾,那么判斷當前字符是否為待刪除字符,如果不是那么i和j全部后移,否則i后移,j不變。
評論列表