骨头坠羽毛 发表于 2023-11-1 13:03:16

C++字符串数组计数

从键盘上输入若干字符,直至按下换行键结束,统计输入英文字母,正数,负数的个数。
(提示:将字符保存在一个字符数组中。)
#include <iostream>
using namespace std;
void main()
{
        char a;
        int i,gs,ywzm=0,zs=0,fs=0;
        cout<<"请输入准备输入的字符数量:";
        cin>>gs;
        cout<<"请输入一些字符(结束时使用回车键):"<<endl;
        for (i=0;i<gs+1;i++)
        {
                cin>>a;
                if (a>0)
                        zs=zs+1;
                else if (a<0)
                        fs=fs+1;
                else ywzm=ywzm+1;
        }
        cout<<"统计下来,英文字母的个数:"<<ywzm<<endl;
        cout<<"          正数的个数:"<<zs<<endl;
        cout<<"          负数的个数:"<<fs<<endl;
        system("pause");
}

isdkz 发表于 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; // 根据实际需要调整数组大小
    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码范围是大写字母、小写字母和数字。

骨头坠羽毛 发表于 2023-11-1 13:03:59

想问问该怎么修改

Mike_python小 发表于 2023-11-1 13:04:24

问题:如何用C++统计输入字符数组中的英文字母、正数和负数的个数?

可以使用以下代码实现:


#include <iostream>
using namespace std;

int main()
{
    const int max_size = 10000;
    char a;
    int i, gs, ywzm = 0, zs = 0, fs = 0;

    cout << "请输入准备输入的字符数量:";
    cin >> gs;
    cout << "请输入一些字符(结束时使用回车键):" << endl;
   
    // 循环读入字符,同时统计英文字母、正数和负数的个数
    for (i = 0; i < gs + 1; i++)
    {
      cin >> a;
      if (isalpha(a)) // 判断是否为英文字母
            ywzm++;
      else if (isdigit(a)) // 判断是否为数字
      {
            if (a == '0') // 数字0作为正数处理
                zs++;
            else if (a > '0') // 大于0的数字为正数
                zs++;
            else // 小于0的数字为负数
                fs++;
      }
    }

    cout << "统计下来,英文字母的个数:" << ywzm << endl;
    cout << "         正数的个数:" << zs << endl;
    cout << "         负数的个数:" << fs << endl;
   
    return 0;
}


上述代码中,使用了isalpha()和isdigit()函数分别判断字符是否为英文字母和数字,同时根据数字的正负性将其归入相应的类别。最终输出统计结果。

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

骨头坠羽毛 发表于 2023-11-1 13:08:47

Mike_python小 发表于 2023-11-1 13:04
问题:如何用C++统计输入字符数组中的英文字母、正数和负数的个数?

可以使用以下代码实现:

哇哦,新知识诶,但是我们还没学到,没法用

万恶的亚撒西 发表于 2023-11-1 17:09:30

学习学习
页: [1]
查看完整版本: C++字符串数组计数