web-dev-qa-db-ja.com

文字配列と文字列の違いは何ですか?

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

16
Todd Moses

文字配列は単に文字の配列です

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

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

14
Steven A. Lowe

文字列is抽象化ですが、文字のsequenceです。実装については何も述べていません。リンクされた文字のリストに基づいてString実装を作成したい場合は、何も問題はありません。

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

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

21
Draemon

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

まず、両方に共通する点に焦点を当てます共通:char配列と文字列の両方が一連の文字で構成されます。 sequenceであることは、文字が順序付けられていること、およびたとえば列挙できることを意味します。

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

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

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

このアプローチ(共通点を確認し、次にそれらがどのようにそれらから分岐するかを確認する)は、さまざまな状況で有用であることが証明されています。

お役に立てれば。

9
CesarGon

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

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

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

4
Oded

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

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

2
ckramer

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

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

0
cpx

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

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

0
T.E.D.

文字列は、ヌル文字「\ 0」で終了する文字配列です

0
harman

StringはJavaのclassです。したがって、属性があります。 length。したがって、文字列のサイズを要求すると、毎回値を計算するのではなく、単にそれを返します。それはまた他の方法、例えばindexOfsubstringなどを使用すると、自分で簡単に実行できるようになります。

0
fastcodejava

Cでは、文字列はnull文字(\ 0)で終了する文字の配列ですが、

C++では、文字列はクラスであり、そのオブジェクトを使用し、最後にnull文字はありませんが、文字の配列には最後にnull文字が含まれています。

また、C++では文字列オブジェクトで演算子を使用できます。

0
Shivam Taneja