0
#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 是一个符号,我将如何以某种方式操纵它,使其始终保持在大写数字和非大写数字之间。谢谢。请尝试将答案保持在初学者水平,请我是新手。

4

3 回答 3

1
if(letter > 'z') {
    //do stuff
}

if(letter < 'a' && letter > 'Z') {
    //do stuff
}

if(letter < 'A') {
    //do stuff
}

这仅取决于当字符进入ASCII图表上字符不是字母的三个范围之一时,您希望如何处理该字符。

作为旁注,您不必将 achar转换为 anint即可对其进行数学运算。

char myChar = 'a' + 2;
cout << myChar;

这将打印:c

cASCII值大于 2 a

于 2013-10-28T18:14:01.567 回答
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 字符集,则通常适用于大写或小写。(请注意,当今大多数系统都支持扩展字符集。)

于 2013-10-28T18:28:04.913 回答
0

您可以使用'x'符号直接针对 ASCII 字符进行测试。此外,您可以使用 && (分别为“和”)一起测试:

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'
}
于 2013-10-28T18:18:50.340 回答