c/c++文字配列、文字ポインタ、文字列タイプのまとめ

2695 ワード

一、文字配列
定義略
初期化:
1 char c[10]={'a','b','c','d','e','f','g','h','i','j'};
注意:初期値の個数が所定の長さ未満の場合、残りの要素は自動的に'0'に入力されます.
2 char c[]={'a','b','c','d','e','f','g','h','i','j'};
システムの自動計算長さは10です.
3 char c[]="abcdefghij"; またはchar c[]={「abcdefghij」};
このときの長さは11です.文字列を作成するときに一番後ろに自動的に'0'、'0'が追加されたASC 2コードは0です.
文字列出力:
次のようなプログラムは安全ではありません.
char c[3]={'a','b','c'};
cout<
出力結果abcのほかに予知できない一連の項目がある
これがc++の煩雑な場所ですが、私たちは毒で毒を攻めることができます.c++の不安全性には、配列が境界を越えて操作できることがあります.
char c[3]={'a','b','c'};
c[3]='\0';
cout<
このように出力するのは正常で、もちろん、この例は技術の探究だけで、実際にはこのように使うことはできません
cout<
char str[]="abcdefghij";
cout<
char str[]="abcdefghij";
cout<
入力の場合、入力された文字列の長さはフレーズ配列の長さでなければなりません.そうしないと、結果は深刻です.
ライブラリ関数:put(str)、gets(str)、strcat(str 1、str 2)、strcpy(str 1、str 2)、strcmp(str 1、str 2)、strlen(str)、strlwr(str)、strupr(str)
以上,文字列配列の使用は比較的柔軟であるが,セキュリティ上は実に見劣りし,特に明瞭で簡単なウィジェットのみを用いる.
二、文字ポインタ
初期化:
char *str="hello world!";
結局strは文字ポインタで、これは「hello world!」の最初の文字のアドレスはstrを与えます
cout<
cout<
cout<
の理屈は明らかで、データ型が文字ポインタの場合、指す場所から'0'が終わるまで出力され、データ型が文字の場合(*str)は単一の文字しか出力されません.
char*cとchar c[]の違いは,前者が変数であり,後者が定数であることである.
三、c++が提供する標準ライブラリstring
stringは本質的にクラスであるため、演算子の再ロードを行うことができ、方法をカスタマイズすることができ、柔軟性をもたらし、高集約低結合のプログラム設計の原則に合致する.
使用前の準備:
#include
using std::string;
初期化方法:
string s2(s1);//    s1     
string s("value");//     
string s(n,'c');//n   'c'

使用するときはstringを基本的なタイプとするだけでいいので、2つの大きなメリットがあります.
1文字列の長さや境界を越えるなどの問題は二度と気にしない.
2割り当ては「=」で直接操作でき、接続は「+」で直接操作でき、使用可能な関係演算子の直接操作と比較して可読性が向上した.
3カスタムメソッド、解結合.
stringの操作:
string str="hello";
cout<
出力:
5
0
指摘すべき点は次のとおりです.
str.size()戻り値のタイプはstring::size_type、str.size()結果を格納する変数はstring::size_でなければなりません.typeタイプは、具体的には神馬タイプであることは不明ですが(c++primerでもそう言われています)、intタイプとは異なるに違いありません.unsignedタイプなので、signedタイプの2倍の長さを表すことができます.また、他の優位性もあるに違いありません.
下書き操作の場合、strの使い方は配列名と似ています.
特に必要でない場合、筆者のプログラミングは基本的にこのようなライブラリを使用しています.