#include <iostream>
using namespace std;
Int main() {
cout<<"Give me a letter" <<endl;
char letter;
cin>>letter;
cout<<letter;
(Int)letter;
letter+=2;
cout<<(char)letter;
(Int)letter;
letter-=25;
cout<<(char)letter;
return 0;
}
我如何以某种方式操纵数字,以便数字始终输出一个字母。 即:如果选择字母z并且添加2是符号,我将如何以某种方式操纵它,以便它始终保持在大写数字和非大写数字之间。谢谢。请尽量保持初学者的答案,请我是新手。
答案 0 :(得分:1)
if(letter > 'z') {
//do stuff
}
if(letter < 'a' && letter > 'Z') {
//do stuff
}
if(letter < 'A') {
//do stuff
}
它取决于你在角色进入ASCII
图表中三个范围之一时字符不是字母的处理方式。
作为旁注,您不必将char
投射到int
来进行数学计算。
char myChar = 'a' + 2;
cout << myChar;
这将打印:c
c
的{{1}}值比ASCII
多2个。
答案 1 :(得分:1)
最可靠的方法是为每个类别使用一个表,然后执行 你的索引算术,模数表的大小。 因此,对于小写字母,您可能会执行以下操作:
char
transcode( char original )
{
char results = original;
static std::string const lower( "abcdefghijklmnopqrstuvwxyz" );
auto pos = std::find( lower.begin(), lower.end(), results );
if ( pos != lower.end() ) {
int index = pos - lower.begin();
index = (index + 2) % lower.size();
results = lower[ index ];
}
return results;
}
此解决方案是通用的,无论哪种设置都可以使用 你想要处理的信件。对于数字(以及对于数字和 小写,如果你不太担心可移植性),你 可以利用代码点的事实 连续的,并做类似的事情:
char
transcode( char original )
{
char results = original;
if ( results >= '0' && results <= '9' ) {
char tmp = results - '0'
tmp = (tmp + 2) % 10;
results = tmp + '0';
}
return results;
}
另一种实现方式是使用类似的东西:
results = results + 2;
if ( results > '9' ) {
results -= 10;
}
上面if
中的。这两种解决方案是数学上的 等效。
这只能保证适用于数字,但通常会有效 适用于大写或小写如果你限制自己 原始的ASCII字符集。 (请注意今天的大多数系统 支持扩展字符集。)
答案 2 :(得分:0)
您可以使用'x'
表示法直接针对ASCII字符进行测试。此外,您可以使用&amp;&amp;和(“和”分别“):
if ('a' <= letter && letter <= 'z') {
// Letter is between 'a' and 'z'
} else if ('A' <= letter && letter <= 'Z')) {
// Letter is between 'A' and 'Z'
} else {
// Error! Letter is not between 'a' and 'z' or 'A' and 'Z'
}
或者您可以使用标准库函数std::isalpha
来处理这个问题:
if (std::isalpha(letter)) {
// Letter is between 'a' and 'z' or 'A' and 'Z'
} else {
// Error! Letter is not between 'a' and 'z' or 'A' and 'Z'
}