gpt4 book ai didi

c++ - 计算字符串中的字母会返回不正确的数字

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:04 24 4
gpt4 key购买 nike

我的老师希望我们编写一个程序来计算输入字符串中字母(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 循环,它对于这类迭代问题来说要干净得多,所以我们现在将坚持使用 while 循环。您直到 while 循环的代码都很好,所以我将忽略它。当你到达 while 循环时,你正在创建一个变量 i 来跟踪你在循环字符数组时的进度,然后告诉 while 语句循环直到遇到 0,它代表空字符(我会实际上将 0 更改为 '\0' 这是完全相同的事情,但更清楚地说明了您的意图)。所以这意味着你的循环将逐个字符地遍历字符串并让你检查每个字符。所以现在在 while 循环中你有一个 if 语句来检查索引 i 处的当前字符是否是一个字母。如果是这样,请增加字母数。这正是你想要的。但是随后您到达 while 循环执行 block 的末尾并返回到条件以检查下一个字符是否为空字符,然后重复 while block 。处理检查字符是数字还是符号的 if 语句位于 while 循环之外,因此不会对字符串中的每个字符执行。相反,它们将仅在 s[i] 上执行一次,这将是空字符,因为这是 while 循环终止后 i 仍指向的索引。您的解决方案应该是将这两个 if 语句移动到 while 循环中,以便它们针对字符串中的每个字符运行。

顺便说一句,小心你的性格测试。您没有包括所有字符。例如,您要包括最多但不包括“Z”的所有字符。确保将这些比较变成 <=。同样更重要的是,您对“其他”字符的检查只会捕获键盘上的其他一些字符。我不会告诉你具体如何解决这个问题,因为这是一项学校作业,但我会告诉你它将涉及将 else 子句与你的 if 语句一起使用(或者更好的是 else if 语句)。如果您还不是很了解,可以在线找到一些优秀的教程。例如:http://www.cprogramming.com/tutorial/lesson2.html

祝你好运,玩得开心!

关于c++ - 计算字符串中的字母会返回不正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24297043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com