2009-04-18 10 views
0

のでシフト:この機能は、「A」と、前方3をシフトする回数を消費した場合、それは、シャアは私がインスタンスの をしたいと戻って文字をシフトライブラリ内の関数を検索し、転送しようとしていますC

3回シフトされ、出力は「d」になります。

この関数が '5'を消費し、3を前方にシフトする場合、3回シフトされ、出力は '8'になります。

どうすればいいですか?

答えて

3

を考えると、これがあること何あなたは、のために求めてきました:

char char_shift(char c, int n) { 
    return (char)(c + n); 
} 

あなたは、その後、あなたの質問を書き直す(多分 'Z' + 1 = 'A' という意図)何か他のものを意味している場合...

+0

質問は本当に不完全です - どのようにオーバーフロー/アンダーフローを処理する必要がありますか?これがなければ完全な解決策は与えられない。 –

7

これを行うには、関数を呼び出す必要はありません。キャラクターに番号を直接追加するだけです。例えば

'a' + 3 

はC、char

'd' 
+0

これは、A-Z文字のASCIIおよびそれに基づく文字セットに当てはまります。これは、現代世界のすべての関連機械をカバーしています。 EBCDICは大きな例外ですが、それはかなり消滅しているようです。 –

+2

@ liw.fiというコメントを考えてみてください。EBCDICは生きていて、z/OSでもうまくいきます。これは、世界的に有名な銀行やその他の金融機関を運営しています。このプラットフォームで実行されているカプセル化されたUNIXでさえ(ASCIIの順序に依存するFOSSをコンパイルするのが難しくなることがあります。 – paxdiablo

2

に評価は(int、及びlong long intような)整数型です。

これは他の整数型と同じように機能しますが、格納できる値の範囲は通常-128〜127または0〜255に制限されますが、これは実装によって異なります。例えば

char x = 3; 
char y = 6; 
int z; 

z = x + y; 
printf("z = %d\n", z); //prints z = 9 

charタイプ(通常はアレイの一部として)は、ほとんどの場合、各文字は数として符号化されたテキストを格納するために使用されます。

文字と定数は便利です。

char x = 'A'; 
char str[] = "AAA"; 

したがって

char x = 65; 
char str[] = {65, 65, 65, 0}; 

、何かに相当します。我々は仮定した場合、マシンは、ケース・キャピタル・Aが65としてコード化されている(今日はほぼユビキタスである)ASCII文字セットを、使用しています'X' + 6のように完璧な意味があります。結果は文字エンコーディングによって異なります。 ASCIIでは、88 + 6と等価であり、94'^'です。