70,020
社区成员




#include<stdio.h>
#include <ctype.h>
#include <string.h>
struct cnt_info {
int ndigit;
int nchar;
int nspace;
int nother;
};
void cout(const char *str, struct cnt_info *pcnt);
/*
char zimu(char x[]);
char kongge(char x[]);
char shuzi(char x[]);
char qita(char x[]); // 四种函数声明
*/
int main()
{
/*
char x[256];
int a=0,b=0,c=0,d=0;
printf("请输入:\n");
gets(x);
a = zimu(x);
b = kongge(x);
c = shuzi(x);
d = qita(x); // 带回函数值
printf(" 字母有%d个\n 空格有%d个\n 数字有%d个\n 其它字符有%d个\n",a,b,c,d); // 输出字符
*/
char str[256];
struct cnt_info cnt = { 0 };
fgets(str, 256, stdin);
str[strlen(str)-1] = 0;
cout(str, &cnt);
printf(" 字母有%d个\n 空格有%d个\n 数字有%d个\n 其它字符有%d个\n",
cnt.nchar, cnt.nspace, cnt.ndigit, cnt.nother); // 输出字符
return 0;
}
void cout(const char *str, struct cnt_info *pcnt)
{
int i = 0;
while (str[i]) {
if (isdigit(str[i]))
pcnt->ndigit++;
else if (isalpha(str[i]))
pcnt->nchar++;
else if (isspace(str[i]))
pcnt->nspace++;
else
pcnt->nother++;
i++;
}
}
/*
char zimu(char x[])
{
int a1=0,i;
for(i=0;i<=x[i];i++)
{
if('A'<=x[i]&&x[i]<='z')
a1++;
}
return (a1);
}
char kongge(char x[])
{
int b1=0,i;
for(i=0;i<=x[i];i++)
{
if(x[i] == ' ')
b1++;
}
return (b1);
}
char shuzi(char x[])
{
int c1=0,i;
for(i=0;i<=x[i];i++)
{
if('0'<=x[i]&&x[i]<='9')
c1++;
}
return (c1);
}
char qita(char x[])
{
int d1=0,i;
for(i=0;i<=x[i];i++)
{
if(x[i]<'A'&&x[i]>'z'&&x[i]>'9'&&x[i]<'0'&&x[i]!=' ')
d1++;
}
return (d1);
}
*/
参考一下吧
可以通过if else一次遍历字符串得到:数字,字母,空格,其他字符的总数;
另外,有专门的判断函数,可以使用;
你的空格判断,字符判断有问题;