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文字が文字ではないチャート上の3つの範囲の1つに入ったときに、文字をどのように処理するかによって異なります.

補足として、それを使って計算を行うためにacharを anにキャストする必要はありません。int

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。これら 2 つの解は、数学的に同等です。

これは数字に対してのみ機能することが保証されていますが、元の 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 に答える