2016-09-01 4 views
1

は、私は次のような何かをしたい:追加でC#文字の値を増やすことはできますか?例えば

char output = 'A' + 1; 

「B」

の出力を取得しかし、単純に私は上記の持っているものしようとすると、キャストエラーが発生します。

+0

'Å' + 1はどうすればよいですか? B? [Unicode文字セット](http://www.unicode.org/faq/utf_bom.html#utf16-1)の[UTF-16エンコーディング](http://www.unicode。 org/charts/nameslist/index.html)。 –

答えて

14

はい、バイナリ+オペレータがcharに定義されていないように、操作を自分でキャストする必要があるので、あなたは、intに暗黙的な変換で終わります。 ++オペレータcharのために定義されているので...

char x = 'A'; 
x++; 

:あなたは、プリ/ポストインクリメント演算子を使用することができます。

しかし、そうでなければ、あなたはキャストを必要とする:

char x = 'A'; 
x = (char) (x + 1); 
+0

私はx ++の例が気に入っています。これは本当に簡潔な方法です。 – EJoshuaS

+0

++オペレータは定義されていますが、+演算子は定義されていないのはなぜですか? –

+0

@トマスズビリ:正直言ってそれはちょうど方法です...恐らくそれはこのように有用であるとみなされました。 –

5

あなたがそう

char output = (char)('A' + 1); 
+0

'1'から' char'へのキャストは必要ありません...とにかく 'int'に暗黙的に変換されます。 –

+0

さて、私はちょうどそれを確認した、ありがとう! – Kolichikov

+0

いいえ、ドキュメントを確認して、charを暗黙的にintに変換することはできますが、それ以外の方法で変換することはできません:https://msdn.microsoft.com/en-us/library/y5b434w4.aspx - 実際には、必要です明示的なキャストを行う。 – EJoshuaS

0

試してみてください。

他人が示されているとおり、はい、それは絶対に可能です
int ASCIINumber = (int)'A'; //101 A 
char charResult = Convert.ToChar(ASCIINumber + 1); //102 or B 
2

。他の答えは例を与えたので、私はそれらを繰り返さない。しかし、私はここに注意を喚起したいと思います。あなたがしているのはキャラクターに数字を "盲目的に"加えてしまうと予期せぬ結果が出るかもしれません。たとえば、Z + 1 = '['。それがあなたが期待している結果なら、それは素晴らしいことです。そうでなければ、それを処理する必要があります。また、charに追加すると印刷できない文字(例:〜+ 1 = 'DEL'、印刷不可能、 'DEL' + 1はもはや「標準」ASCIIではない)が発生する可能性があります。

次の場合を考慮する必要があります.Z、z、または9に1を加えた結果はどうですか?あなたは非文字入力または出力を得ることができますか? {+ 1(結果: '|')は有効でしょうか? Z + 1 = '['? ASCII 127(最後の有効なASCII文字)で何をしていますか?印刷できない文字はどうですか?

入力が文字と数字だけで、結果が有効な範囲の末尾にある場合(たとえば、Z + 1 = A、z + 1 = 、9 + 1 = 0)は、次のような何かを行うことができます:

char bChar = 'A'; // Or whatever you want, obviously 
switch (bChar) 
     { 
      case 'z': 
       bChar = 'a'; 
       break; 
      case 'Z': 
       bChar = 'A'; 
       break; 
      case '9': 
       bChar = '0'; 
       break; 
      default: 
       bChar++; 
       break; 
     } 

主なものは、これらの「エッジケース」で発生し、あなたがそれらを適切に取り扱うことを確認すべきかについての決定を下すことです。

+0

ASCIIは、最新のプログラミング言語の文字データ型と文字列データ型では役割を持ちません。あなたのポイントは、UTF-16コードユニット( 'char')の分離された範囲に対して、Unicodeコードポイントに適用されます。 –

+0

@TomBlodget True、ASCIIは遅くて痛い死を迎えます。いくつかの重複があるので、私が説明することの多くは両方に適用され、使用している文字セットに関係なく同じ問題があります。特にUTF-16については正しいです。いずれにしても、それを加えることによって文字をシフトするのは技術的に「合法」であるのに対し、通常はそれよりも洗練されていなければなりません。 – EJoshuaS

関連する問題