计数字符串中的字母将返回不正确的数字
Counting letters in a string returns incorrect number
老师要我们写一个程序,计算输入字符串中的字母(a-z, a-z)、数字和特殊字符的数量。我们只允许使用<iostream>
。
我的程序正确地计数字母,但是我不能得到数字或其他字符的正确计数。下面是我的代码:
#include <iostream> //preprocessor directive
using namespace std;
//preprocessor directives
int main ()
{
//declare and initialize variables
char s[50];
int i;
int letter = 0;
int number = 0;
int other = 0;
//user input
cout << "Enter a continuous string of characters with no blank spaces" << endl;
cout << "(example: aBc1234!@#$%)" << endl << endl;
cout << "Enter your string: ";
cin >> s;
cout <<endl;
//loop through the string
//count letters
i = 0;
while (s[i] !=0)
{
if ((s[i] >= 'a' && s[i] < 'z') ||
(s[i] >= 'A' && s[i] < 'Z'))
letter++;
i++;
}
//count numbers
{
if ((s[i] >= '0' && s[i] < '9'))
number++;
i++;
}
//count other
{
if ((s[i] >= '!' && s[i] < ')'))
other++;
i++;
}
//output results
cout << "Your string has " << letter << " letters" << endl;
cout << number << " numbers, and " << endl;
cout << other << " other characters" << endl;
return 0;
}
让我们一步一步来。我假设你还没有接触过for循环,对于这种类型的迭代问题来说,for循环要清晰得多,所以我们现在将坚持使用while循环。你的代码直到while循环都很好,所以我将忽略它。当你进入while循环时,你创建了一个变量i来跟踪你的进程,同时循环遍历字符数组,然后告诉while语句循环直到遇到0,这代表null字符(我实际上将0更改为' ',这是完全相同的事情,但更清楚地说明了你的意图)。这意味着你的循环将一个字符一个字符地遍历字符串,让你检查每一个字符。现在在while循环中有一个if语句检查当前索引i处的字符是否是一个字母。如果是,则增加字母计数。这正是你想要的。但是,当到达while循环执行块的末尾时,返回到条件语句,检查下一个字符是否为空字符,然后重复while块。处理检查字符是数字还是符号的if语句位于while循环之外,因此不会对字符串中的每个字符执行。相反,它们将只在s[i]上执行一次,s[i]将是空字符,因为这是while循环结束后i仍然指向的索引。您的解决方案应该是将这两个if语句移到while循环中,以便它们将对字符串中的每个字符运行。
顺便说一下,要小心你的性格测试。你没有包括所有的角色。例如,你包括所有字符,但不包括'Z'。确保将这些比较用<=表示。更重要的是,你对"其他"字符的检查只会捕捉到键盘上的一些其他字符。我不会确切地告诉你如何解决这个问题,因为这是学校的作业,但我会告诉你,它将涉及到使用else子句和你的if语句(或者更好的是else if语句)。如果你对它还不太了解,网上有一些很棒的教程。例如:http://www.cprogramming.com/tutorial/lesson2.html祝你好运,玩得开心!
相关文章:
- 函数如何使用引用返回所需的数字?
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- C++ python 中的函数返回数字而不是字符串
- 使用非托管导出将字符串从 C# 返回到C++将返回数字
- 我的代码应该接受一个数字,并返回字母等级或"Grade is not valid"但 else 语句不起作用
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 将 MPFR 数字转换为字符串并返回
- C++ 递归:返回数字的最小偶数
- typeid.name 返回派生类类型之前的数字
- Fibbonaci 递归代码返回错误值,始终返回下一个数字
- 为什么我的阶乘数查找器返回以C++输入的数字?(已编辑)
- 尝试编写函数尝试从字符串中提取数字,但它返回不相关的数字
- 随机函数在循环中调用时返回相同的数字!C++
- 将字符转换为ASCII返回数字太大
- 为什么此范围基于语句返回一个数字太低的范围
- 根据另一个数字的可整除性返回子数组中的索引
- 如果数组中有重复的数字,如何返回'false'?
- 递归计算满足条件的值数并返回该数字
- C++余数以较高的数字返回 7