字符数组的元素可以逐个字符的输入和输出

zhushican 2年前 (2022-09-04) 六六互联 464 0

word; clear: both; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">字符数组的输入输出

word; clear: both; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255);">字符数组的元素可以逐个字符的输入和输出

(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,用于存放输入的字符串。可以设4个变量或设置一个含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不变。