2016-10-01 4 views
-4

私は問題を解決していましたが、最初の行でその解決策を読んでいました。私はこれを読んでいます 誰も私がこの問題のための他の解決策を望んでいないと仮定して、 *charの意味は何ですか?setはASCIIですか?

文字列にすべて一意の文字が含まれているかどうかを判断するアルゴリズムを実装します。追加のデータ構造を使用できない場合はどうすればいいですか?

ありがとうございました。

+1

https://en.m.wikipedia.org/wiki/ASCII – Zarwan

答えて

0

基本的に、文字コードが0-127の範囲内にあるとします。あなたは狂ったアクセント付きの文字に対処する必要はありません。

32よりも小さいコードがあれば、多くは使用されません。それらは主に印刷不能であるからです。

0

'a' 'b' '1'や '#'などの文字は、コンピュータで保存して使用するときに2進数にエンコードされます。

'a' = 1100001 'b' = 1100010

このエンコーディングに使用できるさまざまな標準がいくつかあります。 ASCIIはこれらの標準の1つです。他の最も一般的な標準はUTF-8と呼ばれています。

すべての文字をすべての標準でエンコードすることはできません。 ASCIIは、UTF-8よりはるかに制限された文字セットを持っています。そのようなエンコーディングは、そのエンコーディングでサポートされている文字セット "char set"も定義します。

各文字を1バイトにASCIIエンコードします。これは、文字A〜Z、小文字a〜z、数字0〜9、少数のよく知られている記号、および初期の通信プロトコルで使用されたいくつかの制御文字をサポートしています。

ASCIIでサポートされている文字のフルセットは、ここで見ることができます:https://en.wikipedia.org/wiki/ASCII

1

には、テキストが、エンコードされたテキストがありません。

テキストは一連の文字で、文字セットのメンバーです。文字セットは、概念上の文字とコードポイントと呼ばれる非負の整数との間の1対1のマッピングです。

エンコードは、コードポイントとバイトシーケンスの間のマッピングです。

例:

  • ASCII、128のコードポイント一のエンコーディング
  • OEM437、256コードポイント一のエンコーディング
  • のWindows-1252、251のコードポイント一のエンコーディング
  • ISO-8859-1、 256のコードポイント一のエンコーディング
  • ユニコード、1,114,112コードポイント、多くのエンコーディング:UTF-8、UTF-16、UTF-32、...

バイトストリームを受け取ったり、テキストを表すファイルを読み込んだりすると、文字セットとエンコードを知っているのはです。逆に、バイトストリームを送信したり、テキストを表すファイルを書き込んだりすると、受信者は文字セットとエンコーディングを認識できるようになります。そうでない場合は、の通信に失敗しました。

注:ほとんどの場合、プログラムのソースコードはテキストファイルです。したがって、この通信要件は、エディタ/ IDEとコンパイラの間でも適用されます。

注:プログラムコンソールの入出力はテキストストリームです。したがって、この通信要件は、プログラム、そのライブラリ、およびコンソール(シェル)間でも適用されます。エンコードの内容を調べるには、localeまたはchcpにアクセスしてください。

多くの文字セットはASCIIのスーパーセットであり、一部のエンコードでは同じ文字が同じバイトシーケンスでマップされます。これは多くの混乱を招き、学習を制限し、貧弱な用語の使用を促進し、部分的な相互運用性はバグのコードにつながります。仕様とコーディングに対する意図的なアプローチは、それを排除します。

例:彼らはASCII、彼らが実際に使用している文字セット間の文字の共通サブセットを意味する場合

  • 一部の人々は「ASCII」と言います。 Unicodeなどでは、これはC0 Controls and Basic Latinと呼ばれています。
  • コードポイントまたはコードポイントのコード化されたバイト(またはコード単位)を意味する場合、「ASCIIコード」と言われる人もいます。

あなたの質問の文脈は不明であるが、声明は、データ内の異なる文字がASCII文字セットに含まれていることを言おうとしているので、その数は、より少ないまたは128に等しく、文字セット間の類似性については、心配する必要があるコードポイントの範囲は0から127です(コードにコメント、アサーション、または例外を適用して読者に明示し、実行時のチェックを行うことができます)。

プログラミング言語の意味は、プログラミング言語とそのライブラリによって異なります。多くの現代のプログラミング言語は、文字列を表すためにUTF-16を使用し、ストリームとファイルに対してUTF-8を使用します。プログラムは、コンソールからの読み書き時にコンソールのエンコーディング(実際または想定)を考慮した標準ライブラリで構築されることがよくあります。

したがって、ファイルからデータを取得する場合は、正しいエンコードを使用してデータを読み取る必要があります。あなたのデータがコンソールから来る場合、あなたのプログラムの標準ライブラリは、エンコーディングをコンソールのエンコーディングから、言語ライブラリまたは標準ライブラリのネイティブ文字と文字列データ型のエンコーディングに変更する可能性があります。あなたのデータがソースコードファイルから来た場合は、それをある特定のエンコーディングで保存し、それが何であるかをコンパイラに伝えなければなりません。 (通常は、コンパイラが想定しているデフォルトのソースコードエンコーディングを使用します。これは一般的にシステム間や人から人へと変化しないからです)。

"追加の"データ構造ビットはおそらく言語の標準リスト、地図、辞書などのライブラリが用意されています。あなたが今まで教えてきたものを、おそらく配列のように使いましょう。もちろん、あなたはただ聞くことができます。

関連する問題