有网友碰到这样的问题“c语言怎样才能输入一行字符,以回车作为结束标志,分别统计出大写字母,小写字母,空格,数字和其他字符的”。小编为您整理了以下解决方案,希望对您有帮助:
解决方案1:
因为字符串中有空格所以不能使用scanf函数来接收键盘输入的字符串,因为scanf遇到空格和回车结束输入,所以需要使用gets来接收键盘输出的字符串,接着依次判断并累加,最后输出即可。
参考代码:
#include <stdio.h>解决方案2:
#include <stdio.h>
void main()
{
int a=0,b=0,c=0,d=0,f=0;
char ch; //这个是一个字符
scanf("%c",&ch); //即使你把ch声明成了一个字符串数组 scanf 遇到空格 就截断了
while(ch!='CR') //虽然你while了 即便ch 是字符串数组 但是没有后移 CR改为换行
{
if(ch>='A'&&ch<='Z')
a=a+1;
else if(ch>='a'&&ch<='z')
b=b+1;
else if(ch==32)
c=c+1;
else if(ch>='0'&&ch<='9')
d=d+1;
else
f=f+1;
scanf("%c",&ch);
}
printf("a=%d,b=%d,c=%d,d=%d,f=%d\n",a,b,c,d,f);
}
解决方案3:
while(ch!='CR')
//改为:
while(ch!='\n')
解决方案4:
'CR'应该是字符串吧,问题是你声明存放是各变量,只能存一个数,必须声明数组存放字符串
解决方案5:
题目要求的是输入一串字符串,而你并没有一个一个去判断是什么。下面是代码,希望可以帮助到你。
#include <iostream>
#include <cstring>
using namespace std;
void main()
{
char string[30];
int character=0,number=0,space=0,other=0;
int i=0;
cin.get(string[0]);
while (string[i++]!='\n')
{
cin.get(string[i]);
//i++;
}
i=0;
while(string[i]!='\n')
{ if (string[i]>='0'&&string[i]<='9') number++;
else if ((string[i]>='A'&&string[i]<='Z')||(string[i]>='a'&&string[i]<='z')) character++;
else if(string[i]==' ') space++;
else other++;
i++;
}
cout<<"字母个数"<<character<<endl;
cout<<"数字个数"<<number<<endl;
cout<<"空格个数"<<space<<endl;
cout<<"其它个数"<<other<<endl;
}