文字配列と文字列の違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 5 5月 2024
Anonim
C言語基礎66 文字配列と文字列配列
ビデオ: C言語基礎66 文字配列と文字列配列

コンテンツ


C ++は両方をサポートしています。 文字配列と文字列、C ++には両方の使用に大きな利点があるためです。ただし、文字配列を操作できないと、クラス文字列が開発されます。文字配列と文字列の両方に文字のシーケンスが含まれます。しかし、文字配列と文字列の根本的な違いは、「文字配列」は標準演算子では操作できないのに対し、「文字列」オブジェクトは標準演算子で操作できることです。文字配列と文字列のその他の違いを調べてみましょう。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠文字配列ひも
ベーシック文字配列は、文字データ型の変数のコレクションです。文字列はクラスであり、文字列の変数はクラス「文字列」のオブジェクトです。
構文char array_name;string string_name;
索引付け文字配列内の個々の文字は、配列内のインデックスによってアクセスできます。文字列では、関数「string_name.charAt(index)」によって特定の文字にアクセスできます。
データ・タイプ文字配列はデータ型を定義しません。文字列は、C ++のデータ型を定義します。
オペレーターC ++の演算子は、文字配列に適用できません。文字列に標準のC ++演算子を適用できます。
境界配列の境界は簡単にオーバーランします。境界はオーバーランしません。
アクセス高速アクセス。アクセスが遅い。


文字配列の定義


文字配列は、「char」データ型の変数のコレクションです。 1次元配列または2次元配列にすることができます。 「ヌル終端文字列」とも呼ばれます。文字配列は、連続したメモリアドレスに格納される文字のシーケンスです。文字配列では、特定の文字はインデックスによってアクセスできます。 「ヌル文字」は文字配列を終了します」。

文字配列の例を見てみましょう:

char name = {A、j、a、y、 0};またはchar name = "Ajay";

ここで、「char」は文字データ型、「name」は文字配列の変数名です。文字配列を初期化する2つの方法を示しました。最初の方法ではnullが明示的に指定され、2番目の方法ではコンパイラが自動的にnullを挿入します。

文字列の最後は常にヌル文字です。これは、文字配列の終了文字です。文字配列は組み込みデータ型ではありません。宣言して文字配列を作成します。文字配列に標準演算子を適用することはできません。文字配列を操作するには、(strlen()、strlwr()、strupr()、strcat())などの組み込み関数があります。標準演算子は文字配列に適用できないため、式に参加できません。

文字配列への文字ポインタも作成できます。

例で理解しましょう。

char s1 = "Hello"; char s2 = "Sir"; s1 = s1 + s2; //エラー演算子は適用できませんs2 = s1; // error文字ポインタchar * s = "Morning"; char * p; p = s; //実行

上記の例では、2つの文字配列s1、s2、および2つの文字ポインターsとpを宣言しました。文字配列s1およびs2が初期化され、加算演算子(+)も代入演算子も文字配列で機能しないことがわかります。ただし、文字ポインターを別の文字ポインターに割り当てることはできます。


文字配列を初期化すると、別の文字セットに再度初期化することはできません。文字配列またはヌル終了文字列へのアクセスは、C ++の文字列と比較して高速です。

文字列の定義

文字列は、C ++の組み込みデータ型ではありません。タイプ「文字列」のクラスオブジェクト。 C ++の場合のように、クラスの作成は「タイプ」の作成と同じです。クラス「文字列」は、C ++ライブラリの一部です。一連の文字または文字配列全体を保持します。標準の文字列クラスの開発には3つの理由があります。

  • 最初 「一貫性」である場合、文字配列はそれ自体がデータ型ではありません。
  • 第二 「便利」である場合、文字配列に標準演算子を使用することはできません。
  • 第3 「安全」である場合、配列の境界は簡単にオーバーランします。

例で文字列を理解しましょう。

文字列s1; s1 = "こんにちは";文字列s2( "おはよう"); string s3 = "Hennery";文字列s4;

上記の宣言では、4つの文字列変数またはオブジェクト(s1、s2、s3、s4)が宣言されています。上記の宣言では、文字列を初期化する3つの方法を示しました。文字列s1が宣言され、個別に初期化されます。文字列s2は、クラス「String」のコンストラクターによって初期化されます。文字列s3は、通常のデータ型と同様に、宣言時に初期化されます。標準演算子を文字列変数に適用できます。

s4 = s1; // 1つの文字列オブジェクトを他の文字列オブジェクトに割り当てるs4 = s1 + s2; // 2つの文字列を追加し、結果を3番目の文字列に格納if(s3> s2)// 2つの文字列を比較s​​tring s5(s1);既存の文字列オブジェクトを使用して新しい文字列オブジェクトを作成する

上記のコードでは、さまざまな演算子が文字列に適用され、さまざまな操作が実行されます。最初のステートメントは、1つの文字列オブジェクトを別の文字列オブジェクトにコピーします。 2番目のステートメントでは、2つの文字列が連結され、3番目の文字列に格納されます。 3番目のステートメントでは、2つの文字列が比較されます。 4番目のステートメントでは、既存の文字列オブジェクトを使用して新しい文字列オブジェクトが作成されます。

文字列へのアクセスは、文字配列またはヌルで終了する文字列と比較して遅くなります。

文字配列と文字列の主な違い

  1. 文字配列は、文字データ型の変数のコレクションです。文字列は、文字列を宣言するためにインスタンス化されるクラスです。
  2. インデックス値を使用すると、文字配列から文字にアクセスできます。一方、文字列内の特定の文字にアクセスする場合は、関数string’s_name.charAt(index)を使用してアクセスできます。
  3. 同様に、配列はデータ型ではないため、文字もデータ型ではありません。一方、クラスである文字列は参照型として機能するため、文字列はデータ型であると言えます。
  4. 文字配列には演算子を適用できませんが、文字列には演算子を適用できます。
  5. 配列である文字配列は固定長であり、その境界は簡単にオーバーランする可能性があります。 Stringには境界がありません。
  6. 配列要素は連続したメモリ位置に格納されるため、文字列変数よりも高速にアクセスできます。

結論:

文字配列を操作できないため、標準の文字列クラスが開発されました。