2012-01-20 18 views
2

私は、文字列オブジェクトで何かを示すために文字の配列を使用しているチュートリアルを見てきました。たとえば、チュートリアルをthees:私は何かを証明するために、char型の配列を使用していないのチュートリアルを見てきましたC++チュートリアルで文字列の配列が文字列に使用されているのはなぜですか?

http://www.cplusplus.com/reference/string/string/copy/

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

。学校では、先生も配列を使用しません。私にとって、配列を使うことは、私がチュートリアルを読んでいるときにはちょっと混乱しています(私がまだC++の初心者であることを知っていれば)。

文字列オブジェクトでできることの1つ以上を表示するためにchar配列を使用するチュートリアルがあるのはなぜか分かります。

答えて

6

文字列に文字列を格納することは、C言語で文字列を表す元の方法でした。 Cでは、文字列はchar型の配列です。配列のサイズは文字数+1です.Cの各文字列は文字値0で終わらなければならないので、+1があります。これはNULL終端文字または終端文字だけです。

Cスタイルの文字列は、C++ではCと下位互換性があるため、合法です。また、多くのライブラリおよび既存のコードベースはCスタイルの文字列に依存します。

Cスタイルの文字列に関するチュートリアルです。 http://www.cprogramming.com/tutorial/c/lesson9.html

FYI:C++文字列をCスタイルの文字列に変換するには、メソッドc_str()を呼び出します。

+2

また、多くの人がCとC++の違いを知らず、オンラインで見つかったほとんどの教育情報が間違っています。 –

2

CおよびC++の文字列は、'\0'という末尾の配列charとして異常に表現されています。 C++では標準クラスstringを使用できますが、それは文字列を表すときに行う「自然な」ことでは決してありません。多くのCおよびC++プログラムは、まだcharの配列を使用してかなりコンテンツです。

+0

私は驚いていないよ「新しい言語として学習標準C++」ビャーネ・ストロヴストルップの論文を参照してください。実際、私はその理由を疑っていました。 – AlexSavAlexandrov

+2

'std :: string'はそれを行うもっと自然な方法であり、誰もヌル終了文字列には満足していません。単にプログラムを書き直してもらうことはできません。 – Puppy

+0

@DeadMG:あなたの意見です。"文字列"を処理する必要があり、c/C++で書かれた多くのアプリケーションでは、std :: stringのオーバーヘッドは必要ありません。また、プログラマ、特にマイクロコントローラを扱う開発者がいますが、それでもcharの配列を使用し、それに不平を言うことはありません。 – Mithrandir

0

STLが登場したとき、C++標準が1990年代のどこかに形成されたときに文字列が現れました。これまで(私の学校ではまだ使われているTurbo C++など...残念なことに)、C++には文字列オブジェクトがなく、誰もがchar配列を使用していました。文字列は実際には文字配列ではできない多くの新しいものを導入していないため、多くの人がそれらを好きではないため、まだ広く使用されています。文字列は実際にはヌルで終了するchar配列ですが、クラスの背後にこれを隠します。

文字列に関する1つの問題は、すべてのライブラリ関数がそれらをサポートしていないことです。たとえば、関数asoiのprintfファミリ( 'asciiから整数'、atofなど)は、文字列をサポートしていません。また、大規模なプロジェクトでは、C言語で作業する必要があり、C言語で文字列が存在しない場合があります。

文字列については、char配列との変換が非常に簡単な方法で実装されています。

+0

[std :: stringはSTLの一部ですか?](http://stackoverflow.com/questions/5972546/is-stdstring-part-of-the-stl)は面白いかもしれません。私はあなたがstdlib、またはSTLではない*標準ライブラリを意味すると信じています。 – Xeo

+1

文字列は、 'char'配列がパフォーマンスや安全性、カプセル化のできないことをいくつか導入しています。ああ、私はジェネリックであることを忘れましたか? 'atoi'関数のすべてには、C++の同等機能があります。 – Puppy

+0

これはまだコンテナを使用しているため、STLに依存しています。それはかなり論争の的な事実です。 – Tibi

1

www2.research.att.com/~bs/new_learning.pdf

+0

私はこの答えは、私の質問に答えるこの本に説明されているアルゴリズムがあることを意味すると思います。右? – AlexSavAlexandrov

+0

これは本ではなく、紙です(わずか11ページ)。 BjarneはC++の作成者です。 この記事では、BjarneはC++を新しい言語として使用する方法を説明し、C++の拡張としてではなくC++の方法で説明します。 私はあなたの質問に答えているかどうかわかりませんが、C++のプログラミング上の慣習を最高に導くことができ、Cのエラーが起こりにくい構造を避けることができます。 –

関連する問題