【发布时间】:2020-03-01 13:04:34
【问题描述】:
我正在用 C++ 建立一个战舰程序,我遇到了一个指定船上坐标的难题。我想使用指定给董事会特定区域的大写和小写字符。 F.exs A2、H4 或 a2、h4 等。我已尝试在主代码之外实现此功能以进行适当检查和调试。
std::char c;
int x=0;
std::cout<<"Test letters to numbers using char(): "; std::cin>>c;
x=char(c);
if(x>=65||x<97){//should i do && or ||? //If statement works in Capital letters A is 0 etc.
x=x-65;
}if(x>=97){//does not work
x=x-97;
}
std::cout<<"letter: "<<c<<"\tNumber: "<<x<<endl;
此代码以大写字母显示。但不是针对显示 a= 32 的小写字母。
运行此代码时没有显示任何错误。有什么建议吗?
【问题讨论】:
-
为什么不先包含
<cctype>并首先转换所有tolower()?然后你可以忽略用户输入信息的情况。(另外,不要使用 magic-numbers,当你的意思是'a'和'A'当你的意思是'A'时使用'a'而不是97和65) -
将尝试使用
-
好的,这行得通,谢谢,我应该分享结果吗?
-
字符串中使用的字符集是实现定义的,大写或小写的概念取决于系统本地化设置(例如,俄罗斯用户的小写/大写字母集将不同于那些在英国)。您假设一个 ASCII(或兼容的)字符集,这是不保证的。相反,使用
<cctype>函数,如islower()和isupper()(检测大小写)或tolower()和toupper()来更改字母的大小写。 -
@Peter 我认为它实际上是 ANSI 而不是 ASCII,但我可能错了。