题目:
【问题描述】输入字符串,统计字符串中字母(包括大小写)、空格的个数。
【输入形式】字符串(包括字母、空格、数字和其他字符)
【输出形式】字母个数 空格个数
【样例输入】%4dB *hg #
【样例输出】4 2
【样例说明】
输入字符串以换行符为结束。测试数据有多组。
思路讲解:
题目要求统计字符串的字母、字符,先来复习一下系统中的数据输入方式
数据输入
输入若干字符串,可以用到的方法有
scanf(“%s",s);scanf()默认的结束符是:空号,tab,换行
get(s); 其中的s只能是字符串,即char类型的数组char【】
getchar();获取一个字符。该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
(1)输入一组数据(数据之间以空格分隔)
#include < stdio.h >
int main()
{
int a,b;
scanf("%d %d",&a, &b);
printf("%d\n",a+b);
return 0;
}
(2)输入多组数据(数据之间以空格分隔)
方法一:
#include < stdio.h >
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) == 2){
printf("%d\n",a+b);
}
return 0;
}
方法二:
#include < stdio.h >
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) !=EOF){
printf("%d\n",a+b);
}
return 0;
}
(3)输入n组数据(数据之间以空格分隔)
#include < stdio.h >
int main()
{
int a,b,n;
scanf("%d",&n);
while(n‐‐){
scanf("%d %d",&a, &b)
printf("%d\n",a+b);
}
return 0;
}
(4)输入多组字符串(字符串中不含空格、tab和换行符)
#include <stdio.h>
int main()
{
char s[100];
while(scanf("%s",s)==1){
printf("%s\n",s);
}
return 0;
}
(5)输入多行字符串(字符串中含有空格)
#include <stdio.h>
int main()
{
char s[100];
while(gets(s)){
puts(s);
}
return 0;
}
ctrl+z 结束输入
题目讲解
题目说“输入字符串以换行符为结束。测试数据有多组。”也就是告诉我们,测试过一组数据,输出完这一组结果后,还不能终止程序,还会再次输入一组数据重新利用代码,需要再次返回一组新的结果,这样一直重复循环下去。
注:回车是一组字符串输入的结束
在终端中实现的效果
符合上面“输入多行字符串(字符串中含有空格)”类型,所以就用gets(s)来接收输入的字符
提前准备一个char类型的数组来储存要输入的字符串,将字符串的每个元素挨个放进数组的每个元素里面
挨个遍历判断数组中每个元素,是否是字母或空格,如果是,就将对应的工具变量++操作。
如果遍历到字符串的最后,遇到结束符‘/0’,就终止遍历,输出记录的结果
最后要将整个过程放入while()循环里面,这样才能实现输入完一组数据并输出一组结果后,接着继续的输入下一组数据
代码展示:
#include<stdio.h>
int main(){
int i=0;
char c[1000];
while(gets(c)){
int a32=0;
int a24=0;
for(i=0;c[i]!='\n';i++){
if(c[i]==32){
a32++;
}
else if((c[i]>=65&&c[i]<=90)||(c[i]>=97&&c[i]<='z')){
a24++;
}}
printf("%d %d\n",a24,a32);
}
return 0;
}