字符數(shù)組的輸入輸出

(1)逐個字符的輸入和輸出

字符數(shù)組的元素可以類似其他類型的數(shù)組一樣,逐個字符的輸入和輸出。

4-9】通過鍵盤輸入一個字符串,以Enter鍵結(jié)束,并將字符串屏幕上輸出。

分析:處理字符數(shù)組和其他數(shù)組一致,可以利用循環(huán)逐個元素輸入,利用getchar()函數(shù)向元素讀入數(shù)據(jù)。

字符數(shù)組的輸入輸出

程序的算法流程圖如圖5-7所示。

字符數(shù)組的輸入輸出 

圖5-7 例5-9算法流程圖

根據(jù)流程圖寫出的程序如下


#include <stdio.h>

int main()

    int i;

    char c[30];

    for(i=0;i<30;i++)

    {

       c[i]=getchar();   /*逐個給數(shù)組元素賦值*/

       if(c[i]=='\n') /*如輸入回車則終止循環(huán)*/

       break;

   }

   i=0;

   while(c[i]!='\n')/*逐個輸出字符數(shù)組的各個元素*/

   printf("%c",c[i++]);

   printf("\n");

   return 0; 

}


程序運行結(jié)果:

   Hello  world!

   Hello  world!

(2)整體輸入輸出

在采用字符串方式后,字符數(shù)組的輸入輸出將變得簡單方便。除了上述用字符串賦初值的辦法外,還可用printf函數(shù)和scanf函數(shù)格式符s或者利用整體輸入輸出函數(shù)gets()/puts()一次性輸出輸入一個字符數(shù)組中的字符串,而不必使用循環(huán)語句逐個地輸入輸出每個字符。

字符串輸出函數(shù)puts的格式為:

puts(字符數(shù)組名)

功能:把字符數(shù)組中的字符串輸出到顯示器。 即在屏幕上顯示該字符串。

字符串輸入函數(shù)gets的格式為:

gets (字符數(shù)組名)

功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入一個字符串,本函數(shù)得到一個函數(shù)值,即為該字符數(shù)組的首地址。

例如有如下的字符數(shù)組定義:

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()函數(shù)可以一次輸入或輸出多個不含有空白符的字符串,而使用gets/puts函數(shù)一次只能輸入或輸出一個字符串,但是字符串中可以包含字符。

【例5-10】不同字符的統(tǒng)計:用戶從鍵盤輸入一個字符串,當(dāng)輸入回車時認(rèn)為輸入結(jié)束,統(tǒng)計輸入字符串中的小寫英文字母、大寫英文字母、數(shù)字字符、其他字符的個數(shù)。

分析:可以聲明字符數(shù)組s,用于存放輸入的字符串。可以設(shè)4個變量或設(shè)置一個含4個元素的整型數(shù)組,用于存放輸入字符串中的小寫英文字母、大寫英文字母、數(shù)字字符、其他字符的個數(shù)。

程序的算法流程圖如圖5-8所示。

根據(jù)流程圖寫出的程序如下:

#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]++; /*判斷數(shù)字字符*/

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; 

}

程序運行結(jié)果:

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

 字符數(shù)組的輸入輸出

例5-10算法流程圖

【例5-11】刪除字符串中指定字符,指定一個字符,刪除字符串中和該字符相同的字符。

分析:設(shè)定字符數(shù)組存放字符串,在字符數(shù)組中完成指定字符的刪除功能。首先輸入待刪除的字符,設(shè)定兩個下標(biāo)訪問數(shù)組,第一個下標(biāo)表示刪除以后的字符數(shù)組中含有的字符,第二個下標(biāo)則訪問當(dāng)前字符數(shù)組。如果當(dāng)前字符不是帶刪除字符,兩個下標(biāo)同時后移,否則只有第二個個下標(biāo)后移,整個過程通過循環(huán)設(shè)計實現(xiàn)。

#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;

}

程序運行結(jié)果:

Input character c:e↙

I lov C languag

利用for循環(huán)控制語句,循環(huán)變量i和j,初值為0,,i訪問當(dāng)前數(shù)組,j訪問刪除以后的數(shù)組,如果當(dāng)前數(shù)組沒有訪問到字符串的末尾,那么判斷當(dāng)前字符是否為待刪除字符,如果不是那么i和j全部后移,否則i后移,j不變。