17

高水準言語に時間を費やしていると、突然、文字配列と文字列の違いがわからないことに気づきました。それらは同じものだと思いますが、確かではありません。違いはありますか?抽象化された単なる文字配列ですか?

4

10 に答える 10

21

文字列抽象化されていますが、一連の文字です。実装については何も言いません。文字のリンクされたリストに基づいて String 実装を作成したい場合、あなたを止めるものは何もありません。

C などの言語では、違いはほとんどありません。ac 文字列は、通常はポインターを介してアクセスされる、連続したアドレスにあるヌルで終わる一連の文字です。

OOP 言語では、String は何らかの String クラスのオブジェクトになります。これはおそらく内部的に文字配列にデータを保持しますが、それを知る必要はありません。文字配列は単純な配列にしかできませんが、実装者が決定した場合、String クラスは文字列に対して多くの操作 (部分文字列、正規表現など) を提供できます。

于 2010-02-17T19:55:24.483 に答える
15

文字配列は単なる文字の配列です

文字列は、文字の配列を使用するデータ構造です

一部の文字列表現は null ターミネータ (C など) を使用し、その他は長さプレフィックスを使用します。

于 2010-02-17T19:52:11.160 に答える
9

私はプログラミングを教えていましたが、これがこの特定の問題を説明するために使用した方法です。

まず、両方の共通点に注目します。char配列と文字列の両方が文字のシーケンスで構成されています。シーケンスであるということは、たとえば、文字が順序付けられており、それらを列挙できることを意味します

ここで、2つのもののそれぞれが、特定の異なる方法で、この共通の基盤に何を追加するかに焦点を当てます。

char配列は、任意の配列が追加することがわかっているものを追加します。つまり、インデックス付けと個々のアイテムへのランダムアクセスです。

一方、文字は、文字のシーケンスが独自のプロパティを持つ全体として表示されるという事実を追加します。一部の実装では、これを達成することは、charの格納方法を変更することを意味します(たとえば、C文字列に終了nullを追加します)。

このアプローチ(共通点を見てから、物事がそれらからどのように分岐するかを見てください)は、さまざまな状況で役立つことが証明されています。

お役に立てれば。

于 2010-02-17T20:14:42.080 に答える
4

C では、これらはほとんど同じですが、文字列の最後に追加の null 文字があります。

他の言語 (Java、C# など) では、文字列はオブジェクトですが、文字配列は ... char (プリミティブ データ型) の配列です。

通常、文字列は文字配列で実装されます。

于 2010-02-17T19:53:19.677 に答える
3

答えは、あなたが話している言語によってある程度異なります。.Net/C# の世界では、文字列は不変オブジェクトですが、char 配列では、配列内の値を簡単に追加/変更できます。文字列内の文字を反復処理できるため、文字列は読み取り専用の char 配列として扱うことができます。

要約すると、最大の違いは、彼らとどのように働きたいかということだと思います。エンドユーザーにメッセージを表示するなど、テキストのチャンクを操作したいですか、それとも一連の文字を見て、リストで何らかの処理を行っていますか? それはすべて、あるレベルではかなり主観的です。

于 2010-02-17T20:00:24.827 に答える
1

言語によって異なります。Cっぽい言語では、それらはほとんど同義語です。違いは、「文字列」には暗黙の終了ヌル文字があるということですが、それは髪の毛を分割することになります。

Fortranはもう1つの極端です。文字配列と文字列はまったく異なるタイプであり、さまざまな操作を使用できます。

于 2010-02-17T20:14:49.540 に答える
0

Cスタイルの文字列は、文字列の終わりを示す「\0」が最後に付いた文字の配列によって内部的に表されます。

C ++には、string.hで定義された文字列コンテナクラスがあり、文字列を操作するための一般的な文字列操作を提供します。

于 2010-02-17T20:13:58.200 に答える
0

StringclassJavaのです。したがって、属性がありますlength。したがって、文字列のサイズを要求すると、毎回値を計算するのではなく、単純にそれが返されます。また、生活を楽にするための他の方法もindexOfあるsubstringので、自分で行う必要はありません。

于 2010-02-17T19:57:02.907 に答える
0

文字列は、ヌル文字 '\0' で終了する文字配列です</p>

于 2013-10-11T16:26:01.037 に答える