鱼C论坛

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

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

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

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

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

x
从键盘上输入若干字符,直至按下换行键结束,统计输入英文字母,正数,负数的个数。
(提示:将字符保存在一个字符数组中。)
  1. #include <iostream>
  2. using namespace std;
  3. void main()
  4. {
  5.         char a[10000];
  6.         int i,gs,ywzm=0,zs=0,fs=0;
  7.         cout<<"请输入准备输入的字符数量:";
  8.         cin>>gs;
  9.         cout<<"请输入一些字符(结束时使用回车键):"<<endl;
  10.         for (i=0;i<gs+1;i++)
  11.         {
  12.                 cin>>a[i];
  13.                 if (a[i]>0)
  14.                         zs=zs+1;
  15.                 else if (a[i]<0)
  16.                         fs=fs+1;
  17.                 else ywzm=ywzm+1;
  18.         }
  19.         cout<<"统计下来,英文字母的个数:"<<ywzm<<endl;
  20.         cout<<"          正数的个数:"<<zs<<endl;
  21.         cout<<"          负数的个数:"<<fs<<endl;
  22.         system("pause");
  23. }
复制代码
最佳答案
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码进行判断,而不是直接比较字符的值。

以下是修改后的代码:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     char a[100]; // 根据实际需要调整数组大小
  6.     int i, gs, ywzm = 0, zs = 0, fs = 0;
  7.     cout << "请输入准备输入的字符数量:";
  8.     cin >> gs;
  9.     cout << "请输入一些字符(结束时使用回车键):" << endl;
  10.     for (i = 0; i < gs; i++)
  11.     {
  12.         cin >> a[ i];
  13.         if (a[ i] >= 'A' && a[ i] <= 'Z' || a[ i] >= 'a' && a[ i] <= 'z')
  14.             ywzm++;
  15.         else if (a[ i] >= '0' && a[ i] <= '9')
  16.             zs++;
  17.         else if (a[ i] == '-')
  18.             fs++;
  19.     }
  20.     cout << "统计下来,英文字母的个数:" << ywzm << endl;
  21.     cout << "正数的个数:" << zs << endl;
  22.     cout << "负数的个数:" << fs << endl;
  23.     system("pause");
  24.     return 0;
  25. }
复制代码


修改后的代码中,将字符的判断逻辑改为使用字符的ASCII码进行判断,对应的ASCII码范围是大写字母、小写字母和数字。
小甲鱼最新课程 -> https://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码进行判断,而不是直接比较字符的值。

以下是修改后的代码:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     char a[100]; // 根据实际需要调整数组大小
  6.     int i, gs, ywzm = 0, zs = 0, fs = 0;
  7.     cout << "请输入准备输入的字符数量:";
  8.     cin >> gs;
  9.     cout << "请输入一些字符(结束时使用回车键):" << endl;
  10.     for (i = 0; i < gs; i++)
  11.     {
  12.         cin >> a[ i];
  13.         if (a[ i] >= 'A' && a[ i] <= 'Z' || a[ i] >= 'a' && a[ i] <= 'z')
  14.             ywzm++;
  15.         else if (a[ i] >= '0' && a[ i] <= '9')
  16.             zs++;
  17.         else if (a[ i] == '-')
  18.             fs++;
  19.     }
  20.     cout << "统计下来,英文字母的个数:" << ywzm << endl;
  21.     cout << "正数的个数:" << zs << endl;
  22.     cout << "负数的个数:" << fs << endl;
  23.     system("pause");
  24.     return 0;
  25. }
复制代码


修改后的代码中,将字符的判断逻辑改为使用字符的ASCII码进行判断,对应的ASCII码范围是大写字母、小写字母和数字。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 13:03:59 | 显示全部楼层
想问问该怎么修改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

可以使用以下代码实现:
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     const int max_size = 10000;
  6.     char a[max_size];
  7.     int i, gs, ywzm = 0, zs = 0, fs = 0;
  8.     cout << "请输入准备输入的字符数量:";
  9.     cin >> gs;
  10.     cout << "请输入一些字符(结束时使用回车键):" << endl;
  11.    
  12.     // 循环读入字符,同时统计英文字母、正数和负数的个数
  13.     for (i = 0; i < gs + 1; i++)
  14.     {
  15.         cin >> a[i];
  16.         if (isalpha(a[i])) // 判断是否为英文字母
  17.             ywzm++;
  18.         else if (isdigit(a[i])) // 判断是否为数字
  19.         {
  20.             if (a[i] == '0') // 数字0作为正数处理
  21.                 zs++;
  22.             else if (a[i] > '0') // 大于0的数字为正数
  23.                 zs++;
  24.             else // 小于0的数字为负数
  25.                 fs++;
  26.         }
  27.     }
  28.     cout << "统计下来,英文字母的个数:" << ywzm << endl;
  29.     cout << "           正数的个数:" << zs << endl;
  30.     cout << "           负数的个数:" << fs << endl;
  31.    
  32.     return 0;
  33. }
复制代码

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

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

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

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

可以使用以下代码实现:

哇哦,新知识诶,但是我们还没学到,没法用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 17:09:30 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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