鱼C论坛

 找回密码
 立即注册
查看: 1722|回复: 9

[已解决]怎么解决,急,求助

[复制链接]
发表于 2019-12-3 20:59:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//有一片文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符得个数。
#include<stdio.h>
void main()
{
        char a[3][80];
        int i,n,k,b,c,d,e,f;
       
        gets(a[k]);
        for(i=0;i<3;i++)
        {
                for(k=0;k<80;k++)
                {
                        if(a[k]>='48' &&a[k]<='57')
                        {
                                b++;
                        }
                        else
                        if(a[k]>='65' &&a[k]<='90')
                        {
                                c++;
                        }
                        else
                        if(a[k]>='97' &&a[k]<='122')
                        {
                                d++;
                        }
                        if(a[k]=='0')
                        {
                                e++;
                        }
                        else
                        f++;
                }
        }
        printf("数字的个数是:%d\n",b);
        printf("大写字母的个数是:%d\n",c);
        printf("小写字母的个数是:%d\n",d);
        printf("空格的个数是:%d\n",e);
        printf("其他字符的个数是:%d",f);
               
}
最佳答案
2019-12-3 22:34:32
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
void strFromFile(const char *Faddr, char *str, size_t sz)
{
    FILE *fp = fopen(Faddr, "r");
    if (fp == NULL)
    {
        perror("file opend fail");
        exit(1);
    }
    fread(str, sizeof(char), sz, fp);
    fclose(fp);
    printf("文件内容:\n%s\n", str);
    int ct[5] = {0};
    for (char *i = str; *i != '\0'; i++)
    {
        if (isdigit(*i)) //统计数字
        {
            ct[0]++;
        }
        if (islower(*i)) //统计小写字母
        {
            ct[1]++;
        }
        if (isupper(*i)) //统计大写字母
        {
            ct[2]++;
        }
        if (isspace(*i)) //统计空格
        {
            ct[3]++;
        }
        if (ispunct(*i)) //统计除去数字,字母,空白字符以外的字符
        {
            ct[4]++;
        }
    }
    printf("\n数字的个数是:%d\n", ct[0]);
    printf("大写字母的个数是:%d\n", ct[2]);
    printf("小写字母的个数是:%d\n", ct[1]);
    printf("空格的个数是:%d\n", ct[3]);
    printf("其他字符的个数是:%d", ct[4]);
}
int main(int argc, char const *argv[])
{
    char *addr = "E:/Users/admin/Documents/VScode/Code/tmp/text.txt";
    char str[255] = {0};
    strFromFile(addr, str, 255);
    return 0;
}
=======================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-zvxmiasy.a5t --stdout=Microsoft-MIEngine-Out-mw4zhur4.fpl --stderr=Microsoft-MIEngine-Error-w42cggib.yph --pid=Microsoft-MIEngine-Pid-kfg3knrd.cvb --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
文件内容:
0123456789
ASDFGHJKLL
asdfghjkll
!@#$%^&*()


数字的个数是:10
大写字母的个数是:10
小写字母的个数是:10
空格的个数是:3
其他字符的个数是:10

E:\Users\admin\Documents\VScode\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-3 21:45:04 | 显示全部楼层
你输入的字符串呢?连输入都没有怎么统计?还是说你准备使用文件导入?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-3 22:08:26 | 显示全部楼层
E:\Users\admin\Documents\VScode\Code\tmp\text.txt
0123456789
ASDFGHJKLL
asdfghjkll
!@#$%^&*()
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    FILE *fp = fopen("E:/Users/admin/Documents/VScode/Code/tmp/text.txt", "r");
    if (fp == NULL)
    {
        perror("file opend fail");
        exit(1);
    }
    char str[255] = {0};
    fread(str, sizeof(char), 255, fp);
    fclose(fp);
    printf("文件内容:\n%s\n", str);
    int ct[5] = {0};
    for (char *i = str; *i != '\0'; i++)
    {
        if (isdigit(*i))//统计数字
        {
            ct[0]++;
        }
        if (islower(*i))//统计小写字母
        {
            ct[1]++;
        }
        if (isupper(*i))//统计大写字母
        {
            ct[2]++;
        }
        if (isspace(*i))//统计空格
        {
            ct[3]++;
        }
        if (ispunct(*i)) //统计除去数字,字母,空白字符以外的字符
        {
            ct[4]++;
        }
    }
    printf("数字的个数是:%d\n", ct[0]);
    printf("大写字母的个数是:%d\n", ct[2]);
    printf("小写字母的个数是:%d\n", ct[1]);
    printf("空格的个数是:%d\n", ct[3]);
    printf("其他字符的个数是:%d", ct[4]);
}
=========================================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-yrmjek43.tit --stdout=Microsoft-MIEngine-Out-frlhiicr.hcb --stderr=Microsoft-MIEngine-Error-mkn4tkug.gke --pid=Microsoft-MIEngine-Pid-pjgpyktx.jz3 --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
文件内容:
0123456789
ASDFGHJKLL
asdfghjkll
!@#$%^&*()

数字的个数是:10
大写字母的个数是:10
小写字母的个数是:10
空格的个数是:3
其他字符的个数是:10

E:\Users\admin\Documents\VScode\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-3 22:10:17 | 显示全部楼层
李龙江 发表于 2019-12-3 21:45
你输入的字符串呢?连输入都没有怎么统计?还是说你准备使用文件导入?


回错对象了............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 22:24:00 | 显示全部楼层
&#127383;厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 22:25:04 | 显示全部楼层
但是我用c语言好像编译不了哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 22:26:22 | 显示全部楼层
第十七行是有一点问题吗还是我的编译器有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 22:27:21 | 显示全部楼层
李龙江 发表于 2019-12-3 21:45
你输入的字符串呢?连输入都没有怎么统计?还是说你准备使用文件导入?

就是用文件导入的这一种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-3 22:34:32 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
void strFromFile(const char *Faddr, char *str, size_t sz)
{
    FILE *fp = fopen(Faddr, "r");
    if (fp == NULL)
    {
        perror("file opend fail");
        exit(1);
    }
    fread(str, sizeof(char), sz, fp);
    fclose(fp);
    printf("文件内容:\n%s\n", str);
    int ct[5] = {0};
    for (char *i = str; *i != '\0'; i++)
    {
        if (isdigit(*i)) //统计数字
        {
            ct[0]++;
        }
        if (islower(*i)) //统计小写字母
        {
            ct[1]++;
        }
        if (isupper(*i)) //统计大写字母
        {
            ct[2]++;
        }
        if (isspace(*i)) //统计空格
        {
            ct[3]++;
        }
        if (ispunct(*i)) //统计除去数字,字母,空白字符以外的字符
        {
            ct[4]++;
        }
    }
    printf("\n数字的个数是:%d\n", ct[0]);
    printf("大写字母的个数是:%d\n", ct[2]);
    printf("小写字母的个数是:%d\n", ct[1]);
    printf("空格的个数是:%d\n", ct[3]);
    printf("其他字符的个数是:%d", ct[4]);
}
int main(int argc, char const *argv[])
{
    char *addr = "E:/Users/admin/Documents/VScode/Code/tmp/text.txt";
    char str[255] = {0};
    strFromFile(addr, str, 255);
    return 0;
}
=======================================
Microsoft Windows [版本 10.0.18363.476]
(c) 2019 Microsoft Corporation。保留所有权利。

E:\Users\admin\Documents\VScode\Code>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.2\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-zvxmiasy.a5t --stdout=Microsoft-MIEngine-Out-mw4zhur4.fpl --stderr=Microsoft-MIEngine-Error-w42cggib.yph --pid=Microsoft-MIEngine-Pid-kfg3knrd.cvb --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
文件内容:
0123456789
ASDFGHJKLL
asdfghjkll
!@#$%^&*()


数字的个数是:10
大写字母的个数是:10
小写字母的个数是:10
空格的个数是:3
其他字符的个数是:10

E:\Users\admin\Documents\VScode\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-20 20:26:38 | 显示全部楼层
静心五 发表于 2019-12-3 22:26
第十七行是有一点问题吗还是我的编译器有问题

我也是17行欸,你解决了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 03:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表