我知道这样很蠢,但是就是想实现一下

qq_41053983 2017-11-30 11:05:34
题目要求
由实参传来一个字符串,统计此字符串中字母,数字,空格,其他字符的个数,在主函数中输入字符串以及输出上述结果

以下为源代码

#include<stdio.h>
int main()
{
char zimu(char x[]);
char kongge(char x[]);
char shuzi(char x[]);
char qita(char x[]); // 四种函数声明

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); // 输出字符
return 0;
}

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);
}

我是想在最后其他字符输出那 怎样能表示?
...全文
126 3 点赞 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
自信男孩 2017-12-01
#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一次遍历字符串得到:数字,字母,空格,其他字符的总数; 另外,有专门的判断函数,可以使用; 你的空格判断,字符判断有问题;
  • 打赏
  • 举报
回复
heronism 2017-12-01
错误较多,往仔细检查: 1. 每个判断函数不需要传入长度吗,怎么能用数组的内容作为长度结束的标志 2. 空格函数的判断对吗 3. 按你的逻辑,其他函数只要对前面三个函数的条件与(&&)取非(!)就可以了 非常不建议这么写,效率低下,逻辑杂乱,小程序也是需要设计的
  • 打赏
  • 举报
回复
不是这3种情况,就算是“其它”啊!
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2017-11-30 11:05
社区公告
暂无公告