我刚开始学习C ++,下面是我为一项练习编写的程序:
程序在打印结果后崩溃了。这里我是否漏掉了什么非常明显的东西?
此外,一个问题:即使不应该增加变量“other”,它也总是增加。我使用else语句有问题吗?
#include <iostream>
#include <string>
using namespace std;
int main ()
{
int uppercase=0, lowercase=0, digits=0, other=0, i=0;
int character;
char* string;
cout << "Enter a string!\n";
cin.getline(string, 20);
while(true)
{
character = int(*(string+i));
if (character==0)
{
break;
}
if (character > 64 && character < 91)
{
uppercase++;
}
if (character > 96 && character < 122)
{
lowercase++;
}
if (character > 47 && character <58)
{
digits++;
}
else
{
other++;
}
i++;
}
cout << "Upper case " << uppercase << "\n";
cout << "Lower case " << lowercase << "\n";
cout << "Digits " << digits << "\n";
cout << "Others " << other << "\n";
return 0;
}
程序在打印结果后崩溃了。这里我是否漏掉了什么非常明显的东西?
此外,一个问题:即使不应该增加变量“other”,它也总是增加。我使用else语句有问题吗?
<cctype>
,它(除其他外)提供了函数std::isupper()
、std::islower()
和std::isdigit()
。你正在检查 ASCII 码,一旦出现例如"José"
或"München"
这样的情况,你将得到错误的结果... - DevSolarstd
方法检查类型比期望人们知道字符47
更不容易出错和混乱。而且更具可移植性;仍有人使用EBCDIC,这段代码在他们身上会彻底失败。以及非英文字母表。 - cHao