鱼C论坛

 找回密码
 立即注册
查看: 1253|回复: 5

[已解决]C++字符串数组计数

[复制链接]
回帖奖励 5 鱼币 回复本帖可获得 5 鱼币奖励! 每人限 1 次(中奖概率 20%)
发表于 2023-11-1 13:03:16 | 显示全部楼层 |阅读模式

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

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

x
从键盘上输入若干字符,直至按下换行键结束,统计输入英文字母,正数,负数的个数。
(提示:将字符保存在一个字符数组中。)
#include <iostream>
using namespace std;
void main()
{
        char a[10000];
        int i,gs,ywzm=0,zs=0,fs=0;
        cout<<"请输入准备输入的字符数量:";
        cin>>gs;
        cout<<"请输入一些字符(结束时使用回车键):"<<endl;
        for (i=0;i<gs+1;i++)
        {
                cin>>a[i];
                if (a[i]>0)
                        zs=zs+1;
                else if (a[i]<0)
                        fs=fs+1;
                else ywzm=ywzm+1;
        }
        cout<<"统计下来,英文字母的个数:"<<ywzm<<endl;
        cout<<"          正数的个数:"<<zs<<endl;
        cout<<"          负数的个数:"<<fs<<endl;
        system("pause");
}
最佳答案
2023-11-1 13:03:30
这段代码的功能是从键盘上输入一些字符,并统计输入的英文字母、正数和负数的个数。代码中定义了一个字符数组a,用于保存输入的字符。变量gs用于记录准备输入的字符数量。

代码的主要逻辑是使用for循环来逐个读取输入的字符,并根据字符的值判断是英文字母、正数还是负数。如果字符大于0,则认为是正数,将zs变量加1;如果字符小于0,则认为是负数,将fs变量加1;否则,认为是英文字母,将ywzm变量加1。

最后,输出统计结果,分别输出英文字母的个数、正数的个数和负数的个数。

该代码存在一些问题:
1. 使用void main()作为程序入口,这是错误的,应该使用int main()。
2. 字符数组a的大小为10000,这可能会导致内存溢出的问题,应该根据实际需要调整数组大小。
3. 输入字符的循环条件为i<gs+1,应该改为i<gs,因为数组的下标是从0开始的。
4. 对于判断正数和负数的逻辑不正确,应该使用字符的ASCII码进行判断,而不是直接比较字符的值。

以下是修改后的代码:
#include <iostream>
using namespace std;

int main()
{
    char a[100]; // 根据实际需要调整数组大小
    int i, gs, ywzm = 0, zs = 0, fs = 0;
    cout << "请输入准备输入的字符数量:";
    cin >> gs;
    cout << "请输入一些字符(结束时使用回车键):" << endl;
    for (i = 0; i < gs; i++)
    {
        cin >> a[ i];
        if (a[ i] >= 'A' && a[ i] <= 'Z' || a[ i] >= 'a' && a[ i] <= 'z')
            ywzm++;
        else if (a[ i] >= '0' && a[ i] <= '9')
            zs++;
        else if (a[ i] == '-')
            fs++;
    }
    cout << "统计下来,英文字母的个数:" << ywzm << endl;
    cout << "正数的个数:" << zs << endl;
    cout << "负数的个数:" << fs << endl;
    system("pause");
    return 0;
}

修改后的代码中,将字符的判断逻辑改为使用字符的ASCII码进行判断,对应的ASCII码范围是大写字母、小写字母和数字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 13:03:30 | 显示全部楼层    本楼为最佳答案   
这段代码的功能是从键盘上输入一些字符,并统计输入的英文字母、正数和负数的个数。代码中定义了一个字符数组a,用于保存输入的字符。变量gs用于记录准备输入的字符数量。

代码的主要逻辑是使用for循环来逐个读取输入的字符,并根据字符的值判断是英文字母、正数还是负数。如果字符大于0,则认为是正数,将zs变量加1;如果字符小于0,则认为是负数,将fs变量加1;否则,认为是英文字母,将ywzm变量加1。

最后,输出统计结果,分别输出英文字母的个数、正数的个数和负数的个数。

该代码存在一些问题:
1. 使用void main()作为程序入口,这是错误的,应该使用int main()。
2. 字符数组a的大小为10000,这可能会导致内存溢出的问题,应该根据实际需要调整数组大小。
3. 输入字符的循环条件为i<gs+1,应该改为i<gs,因为数组的下标是从0开始的。
4. 对于判断正数和负数的逻辑不正确,应该使用字符的ASCII码进行判断,而不是直接比较字符的值。

以下是修改后的代码:
#include <iostream>
using namespace std;

int main()
{
    char a[100]; // 根据实际需要调整数组大小
    int i, gs, ywzm = 0, zs = 0, fs = 0;
    cout << "请输入准备输入的字符数量:";
    cin >> gs;
    cout << "请输入一些字符(结束时使用回车键):" << endl;
    for (i = 0; i < gs; i++)
    {
        cin >> a[ i];
        if (a[ i] >= 'A' && a[ i] <= 'Z' || a[ i] >= 'a' && a[ i] <= 'z')
            ywzm++;
        else if (a[ i] >= '0' && a[ i] <= '9')
            zs++;
        else if (a[ i] == '-')
            fs++;
    }
    cout << "统计下来,英文字母的个数:" << ywzm << endl;
    cout << "正数的个数:" << zs << endl;
    cout << "负数的个数:" << fs << endl;
    system("pause");
    return 0;
}

修改后的代码中,将字符的判断逻辑改为使用字符的ASCII码进行判断,对应的ASCII码范围是大写字母、小写字母和数字。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 13:03:59 | 显示全部楼层
想问问该怎么修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 13:04:24 | 显示全部楼层
问题:如何用C++统计输入字符数组中的英文字母、正数和负数的个数?

可以使用以下代码实现:
#include <iostream>using namespace std;int main(){    const int max_size = 10000;    char a[max_size];    int i, gs, ywzm = 0, zs = 0, fs = 0;    cout << "请输入准备输入的字符数量:";    cin >> gs;    cout << "请输入一些字符(结束时使用回车键):" << endl;        // 循环读入字符,同时统计英文字母、正数和负数的个数    for (i = 0; i < gs + 1; i++)    {        cin >> a[i];        if (isalpha(a[i])) // 判断是否为英文字母            ywzm++;        else if (isdigit(a[i])) // 判断是否为数字        {            if (a[i] == '0') // 数字0作为正数处理                zs++;            else if (a[i] > '0') // 大于0的数字为正数                zs++;            else // 小于0的数字为负数                fs++;        }    }    cout << "统计下来,英文字母的个数:" << ywzm << endl;    cout << "           正数的个数:" << zs << endl;    cout << "           负数的个数:" << fs << endl;        return 0;}
上述代码中,使用了isalpha()isdigit()函数分别判断字符是否为英文字母和数字,同时根据数字的正负性将其归入相应的类别。最终输出统计结果。

需要注意的是,上述代码中对输入字符数量没有做越界检查,需要保证输入字符数量不超过max_size的限制。

球一个最佳答案谢谢啦!这对我非常重要!

评分

参与人数 1鱼币 +2 收起 理由
骨头坠羽毛 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-11-1 13:08:47 | 显示全部楼层
Mike_python小 发表于 2023-11-1 13:04
问题:如何用C++统计输入字符数组中的英文字母、正数和负数的个数?

可以使用以下代码实现:

哇哦,新知识诶,但是我们还没学到,没法用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 17:09:30 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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