计算字符串中的字母会返回错误的数字

时间:2014-06-19 00:30:48

标签: c++ string count

我的老师要我们编写一个程序来计算输入字符串中的字母数(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;
}

1 个答案:

答案 0 :(得分:0)

让我们一步一步走。我假设你还没有接触到for循环,这对于这种类型的迭代问题来说更加清晰,所以我们现在将坚持使用while循环。你的代码直到while循环都没问题,所以我会忽略它。当你到达while循环时,你正在创建一个变量i,以便在循环遍历字符数组时跟踪你的进度,然后告诉while语句循环,直到它遇到一个0,代表空字符(我是实际上将0更改为'\ 0'这是完全相同的事情,但更清楚地表明你的意图)。所以这意味着你的循环将通过字符串逐字逐句,让你检查每一个。所以现在在while循环中你有一个if语句来检查索引i的当前字符是否是一个字母。如果是这样,请增加字母数。这正是你想要的。但随后到达while循环执行块的末尾并返回条件以检查下一个字符是否为空字符,然后重复while块。处理检查字符是数字还是符号的if语句在while循环之外,因此不会对字符串中的每个字符执行。相反,它们将仅在s [i]上执行一次,这将是空字符,因为这是我在while循环终止后仍指向的索引。您的解决方案应该是将这两个if语句移动到while循环中,以便为字符串中的每个字符运行它们。

顺便说一句,小心你的角色测试。你没有包括所有角色。例如,您包括所有字符,但不包括'Z'。确保将这些比较与&lt; =进行比较。更重要的是,检查“其他”字符只会捕获键盘上的其他一些字符。我不会告诉你究竟如何解决这个问题,因为它是一个学校作业,但我会告诉你它将涉及在if语句中使用else子句(或者甚至更好的else if语句)。如果你还不太了解它,那么网上有一些优秀的教程。例如:http://www.cprogramming.com/tutorial/lesson2.html

祝你好运,玩得开心!