文字列について
文字列は、単語や文章のように
文字が連なるものを指します。特に、コンピュータやプログラミングの分野で頻繁に使用される用語であり、場合によっては「ストリング」や「テキスト」とも呼ばれています。
文字列の処理は、プログラミングにおける基本的な作業の一つであり、数値演算と同等に重要です。ほとんどのプログラミング言語には、
文字列を扱うための明確なデータ型や手続き、関数が存在します。
プログラミング言語における文字列
たとえば、C#のように
文字列が基本的なデータ型として組み込まれている言語もありますが、C言語のように
文字列を基本型として持たない言語も存在します。伝統的なプログラミング言語の多くは、各
文字を1バイトの数値で表現し、
文字列を連続した
文字の配列として実現しています。この場合、
文字列の終わりを示すために特定の記号を使ったり、別途で長さを持たせたりする方法が取り入れられています。
C言語では、
文字列の終端を示すためにヌル
文字(ゼロ)を用います。これに対し、Pascalなどの言語では
文字列の長さを保持する方式が取られています。また、
Microsoft Windows上で広く使用されるBSTRのように、ヌル終端
文字列と長さ情報を併用する構造も存在します。
データのビット列としての扱い
コンピュータ内では全ての情報はビット列として記録されるため、
文字列中の各
文字も最終的にはビット列として処理されます。この
文字とビット列の対応関係は「
文字コード」と呼ばれ、プログラミング言語や
オペレーティングシステムによって異なる
文字コードが使用されます。異なるプログラムやシステムが同じ
文字コードを使用すれば、同じビット列から同じ
文字を再現することが可能です。
文字コードの代表的なものはASCIIで、これに続き、多くの
文字を対応させるための方法が開発されました。Cの標準規格C95では、複数のバイトで1
文字を扱うマルチバイト
文字方式や、1バイト以上の幅を持つ
文字型が新たに追加されました。これにより、漢字などの表現が可能になっています。
各言語の文字列処理
後発の言語であるJavaなどでは、最初から
Unicodeに基づく
文字列処理が組み込まれています。
Unicodeは、16ビットまたは32ビットに収まりきらない論理的な1
文字を扱う必要が出てきたため、新たなアプローチが必要とされました。これにより、サロゲートペアや書記素クラスタの概念が導入され、複雑な
文字列の扱いが可能になっています。
一方で、C言語は
文字列処理において限界があり、プログラマーは配列の長さやメモリの管理を常に意識しながらプログラミングする必要があります。C言語では
文字列は第一級のオブジェクトではなく、
文字列の結合やコピーも手間がかかりますが、C++のようなオブジェクト指向言語やスクリプト言語では、より直感的に
文字列を扱うことができるようになります。
まとめ
最後に、
文字列定数は多くのプログラミング言語でダブルクォーテーションで囲まれる規則がありますが、シングルクォーテーションが使える言語もあります。
文字列はプログラミングの中で非常に重要な要素であり、その取り扱いは言語ごとに異なります。