文字配列と文字列、charとstring定義の文字列の違いと遍歴

5017 ワード

文字配列:文字を格納する配列
文字列:最も頻繁に使用される文字配列で、特殊な文字配列です.
C++には専用の文字列のタイプはなく、1つの文字列は実際には1つの文字配列であり、普通の文字配列とは異なり、文字列の末尾には1つの文字0があり、文字列の終わりを表す.
charは文字配列を定義したり文字列を定義したりできます
char定義文字配列
char b[]={'h','e','l','l','o'};//      ,   5

char定義文字列
文字列の利点は、入力、出力、初期値の付与にあり、入力出力は悪用する必要はありません.文字配列は、各文字をループで順次出力する必要があります.
 char b[]="hello";//     
 char *p = b;
 cout << b;//    hello
 cout<<  *p;//       ,      h

文字配列と文字列の違い
C++では、文字配列と文字列はcharキーワードで定義されていますが、両者の違いは、文字列の長さが文字数に1を加えたことです.0エンド文字が含まれているため、文字配列の長さが文字数です.文字配列についてはsizeofで長さを求めることができますが、文字列については長さに1を加算します.したがってこの長さは意味がないので、そのためにC++はstrlenで文字列の有効な内容の長さを求めることができる(文字列終了フラグ0を含まない).
ポインタと文字列、ポインタと文字配列
ポインタが文字配列を指す
    char b[] = { 'h','e','l','l','o' };
    char *pchar = b;
    cout << *pchar;//      h
    //cout << b; //         ,     hello      
    cout << b[0]; //      h
//           hello。
for (size_t i = 0; i < 5; i++)
    {
        cout << *pchar;
        pchar++;
    }

ポインタが文字列を指す
char定義文字列
ポインタをcharで定義し、charで定義した文字列を指すと、ポインタ変数pと*pで出力される結果が異なります.2つの状況を見てください.具体的な原因は私も知らない.
方式1
  char str[] = "we are poor students";//       
  cout<<str<//    :we are poor students。         ,      。

  //           。
  char *p = str;
  while (*p != '\0')
  {
    cout << *p;
    p++;
  } 

方式2
    //
    char *p = str;
    while (*p != '\0')
    {
        cout << p<

string定義文字列
ここで特に注意しなければならないのはstringがキーワードではなくクラスであることです.次のコードのポインタはstringの最初の文字ではなくオブジェクトを指します.
    string str="hello world";
    string *p1 = &str; //            &
    cout << str << "," << *p1; //      hello world,hello world
  • string定義文字列の各文字にアクセスするには、str[i]
  • を使用します.
  • cout<
  • char定義の文字列のようにp 1[i]を使用することはできません.stringではi>0にポインタが割り当てられていません.この理解はもともと間違っています.

  • 各文字をポインタで巡回
  • 用C++の反復器
  •   string str1 = "we are poor students"; 
      for (string::iterator p1 = str1.begin(); p1 !=str1.end(); p1++)
      {
        cout << *p1 ;
      }
  • c_str() (Get C string equivalent) でcタイプのstringに変換され、以下のコードで示す:
  • string str1 = "we are poor students";
    const char *p = str1.c_str();//     。
    for (size_t i = 0; i < str1.size(); i++)
    {
      cout << *(p + i);
    }