このプログラムを解決するアルゴリズムはありますか?次の文字をCでASCIIコードを増やして印刷してください。
ユーザーが文字列を入力し、文字列のすべてのアルファベットをASCII値でインクリメントし、コンソールアプリケーションC#で出力を印刷するプログラムを作成します。
(ユーザーがABCDを入力した場合と同様に、それはBCDEを表示します。)
このプログラムを解決するアルゴリズムはありますか?次の文字をCでASCIIコードを増やして印刷してください。
ユーザーが文字列を入力し、文字列のすべてのアルファベットをASCII値でインクリメントし、コンソールアプリケーションC#で出力を印刷するプログラムを作成します。
(ユーザーがABCDを入力した場合と同様に、それはBCDEを表示します。)
可能な解決策は、文字配列に文字列を変換し、その配列を反復することであろう。
配列内の各要素について、値を1つ増やして文字型にキャストし直します。 (基本的には、charとintはASCIIテーブルの値の制限を持つcharと同じであり、コンピュータがcharにイメージを関連付けることができるため動作します)
これはあなたの質問に答えたと思います。
一つの簡単でわかりやすい方法は、それを行うには:.NETで
byte[] bytes = System.Text.Encoding.ASCII.GetBytes("abcd".ToCharArray());
for (int i = 0; i <= bytes.GetUpperBound(0); i++)
{
bytes[i]++;
}
Console.WriteLine(System.Text.Encoding.ASCII.GetString(bytes));
文字列はUTF-16コード単位の配列です。これは、Java、JavaScript、HTML、XML、XSL、Windows APIなどにも当てはまります。文字列の.NETデータ型はString
、UTF-16コード単位の.NETデータ型はChar
です。 C#では、それらのキーワードの別名string
とchar
を使用できます。
UTF-16は、Unicode文字セットのいくつかのエンコードの1つです。各Unicodeコードポイントを1つまたは2つのコード単位でエンコードします。 2つのコードユニットが使用されるとき、それらはサロゲートペアと呼ばれ、高いサロゲートの順番では低いサロゲートと呼ばれる。
ASCIIはUnicodeのサブセットです。 ASCIIと共通のUnicode文字は、まさにU + 0000〜U + 007Fです。 UTF-16はそれらをそれぞれ1つのコード単位としてエンコードします: '\ u0000'〜 '\ u007F'。 ASCII文字セットの1つのエンコードでは、それぞれ0x00〜0x7fの1バイトでエンコードされます。
問題文は、「文字列」、「アルファベット」、「ASCII」、「C#」および「コンソール」を指します。これらの各々は理解されなければならない。
残念ながら、「ASCII」は「文字コード」を意味します。 "C#" "文字列"の文脈において、文字コードは、UnicodeコードポイントまたはUTF-16コードユニットのいずれかを意味する。入力文字がUTF-16サロゲートペアを必要とせず、範囲がU + 0000〜U + 007Fであっても単純化することができます。
「アルファベット」は、数学的用語と言語的用語の両方です。数学(およびコンピュータ科学)において、「アルファベット」はトークンの集合であり、しばしば順序が与えられます。言語学では、「アルファベット」は、特定の言語のための筆記体系で使用される一連の基本的な文字です。それはしばしば「言語アカデミー(language academy)」によって定義され、言語で使用されるすべての形式の文字を含む場合と含まない場合があります。例えば、受け入れられた英語のアルファベットには、英語の言葉で使用されているにも関わらず、発音区別記号やアクセント記号や合字を含む文字は含まれません。また、書記体系では、一部またはすべての文字に大文字、小文字、大文字またはその他の形式を使用できます。この問題では、ASCIIが記述され、Basic Latin文字が大文字と小文字で記述されたASCIIの場合、UTF-16コード単位の値で順序付けられた2つの技術アルファベットA〜Zとa〜zを定義できます。
アルファベットの各文字の文字コードを増やしたいので、結果がアルファベットになっていない場合の処理を決める必要があります。最終的に可能な文字がある(または別個のUTF-16コードユニットの範囲で多くの文字がある)ため、結果は本当に文字ですか?アルファベットの最初の文字に折り返すことを検討するかもしれません。 Z→A、z→a。
最終的なものは「コンソール」です。コンソールには、文字エンコーディングの設定があります。あなたのプログラムはコンソールから読み書きされます。あなたがそれに書き込むとき、フォントを使って受け取った文字のイメージを生成します。すべてが整列すれば、素晴らしい。もしそうでなければ、あなたはそれについて質問することができます。要点:プログラムが読み書きするとき、入出力関数は符号化変換を行います。したがって、あなたのプログラム内では、String
とChar
の場合、エンコーディングはUTF-16です。今
、String
はそうあなたがforeach
を含むいくつかの分解技術を使用することができますChar
の配列である。
foreach (Char c in inputString)
{
if (Char.IsSurrogate(c)) throw new ArgumentOutOfRangeException();
if (c > '\u007f') throw new ArgumentOutOfRangeException();
// add your logic to increment c and save or output it
}
それは、問題の各側面を見る非常に良い、完全な答えです。それは大好きです。私はおそらく宿題に関連するこの質問で少し浪費されるのではないかと心配しています。それでも、偶然、ここに来る人には非常に便利かもしれません。私はまた、Joel Spolskyの優れたUnicodeと文字セットについて紹介したいと思っています。http://www.joelonsoftware.com/articles/Unicode.html –
@BernhardKönigありがとうあなたのフィードバック。 Joelの記事は面白いですが、新しいプログラマーがUnicode BMP UTF-16を最初に教えていて、研究中のIETF RFCによって呼び出されたときだけ、ASCIIが教えられればどうなるのだろうかと思います。現代のプログラミング言語やオペレーティングシステムでは、MS-DOSでさえもASCII文字セット自体は使用されません。 –
それはとても良い説明です。本当に感謝。 –
SO残念ながら、コードの書き込みの工場ではありません。 – Karolis
私はこのプログラムをコーディングすることができるように私にいくつかのアルゴリズムを与えます。 –
これを解決するには文字列ビルダを使用する必要がありますか? –