Reゼロから始まるC++の道(三)文字列

3765 ワード

今日の主な内容は文字列です.Cを学んだ同級生は、Cの文字列が'0'で終わる文字型の配列であることを知っていた.しかし、C++の伝統的なCスタイルの文字列になると、それほどスマートで便利ではありません.新しいC++の文字列の学習を始めます.文字列に関する関数はすべて中にあります.書類を広げてください.
 1.ネーミングスペースのusing宣言
C++におけるネーミングスペースの定義が引用されている.関数や変数などを記述する名詞が少なすぎるため、衝突しやすい.例えば、あなたがAクラスの李さんなら、Bクラスの李さんがいる可能性が高いです.私が李さんを呼んだとき、どの人を呼んでいるのか分からないかもしれません.だからAクラスとBクラスの区別ができた.A、Bの2つのクラスは2つの異なるネーミング空間です.C++で類似std::something;このような類似の文は、このsomethingがstd空間に属することを説明する.私たちが普段使っている基本的なC++操作の大部分はstd空間に属しています.例えば、標準ストリーム入出力cinとcoutの兄弟です.しかし、名詞を1つ使うたびにstdを打つのは煩わしいのではないでしょうか.だから使える
using namespace std;
これにより、オブジェクトに属するネーミングスペースを宣言しない場合、コンパイラはstdに属することをデフォルト化します.これは多くの人がc++に入門するときにコードでよく見られる文です.
ここでは、ヘッダファイルにusing宣言が含まれるべきではないことに注意してください.これは、ヘッダファイルの内容がすべての参照ファイルにコピーされるためです.ヘッダファイルにusing宣言がある場合、使用するファイルごとにこの宣言があります.思わぬ衝突を引き起こす可能性が高い.
2.stringタイプとその初期化
C++のstringは標準ライブラリタイプです.Cとは異なり、ここの文字列には独自のタイプがあります.その長さは可変です.スタンダードライブラリは、あなたが普段仕事で最もよく使うツールボックスになっていることを理解することができます.この中には良いものがたくさんあります.以下に、文字列オブジェクトの初期化方法をいくつか示します.
string s1;//これはデフォルトの初期化で、一般的には空の文字列が得られます.
string s2 = s1;//s 1を用いてs 2に初期値を与え,s 1とそっくりのs 2を生成した.
string s3 = "tutu";//文字面定数を用いて初期値を付与すると,中の対応内容は自然に文字面値である.
string s4 = (5,w);//s 4の内容は「wwwww」
string s5(s1);//効果とs 2
string s6("tutu");//効果はs 3と同じです
次の点は、直接初期化とコピー初期化の違いについてです.直接初期化は、オブジェクトを作成して内側の値がそれほど多いことに相当します.コピー初期化は,既存のオブジェクトを用いた上で,値をコピーすることによってもう1つコピーする.具体的に見ると
string s1 = "tutu";//ここではコピー初期化
string s2("tutu");//ここでは直接初期化
string s3(5,'w');//ダイレクトイニシャル
一見、'='を用いるのが一般的にコピー初期化である.ええ、それは分かりましたが、これから何の役に立つか分かりません.
3.stringの操作について
OSが出力ストリーム,inが入力ストリームであると仮定する.しばらくはcoutとcinと見なすことができます.
os<
in>>s;//iの値をs<>>に読み込むと、2つの矢印がどのデータに流れるかを理解します.
getline(in,s);//入力ストリームからsに1行のデータを得る
s.empty();//もしsが空だったら真に戻る
s.size();//sのサイズ、文字列の長さを返します
s[n];//n号要素の値、0から計算します
s1+s3;//2つの文字列が接続されています
s1=s2;//s 1の中の文字列をs 2の文字列で置き換えます
s1 == s2;//等しいのは本当に等しくないのはstrcmp()よりずっと簡単でしょう
s1 != s2;//同理
,<=,>=;//ディクショナリシーケンスの比較を参照して、大文字と小文字が異なります
4.stringオブジェクトの読み書き
次のコードを見てみましょう
#include
using namespace std;
int main()
{
   string s;
   cin>>s;
   cout<

ここにはstringの書くこともstringの読むこともあります.しかし、stringは書くときに入力した前のいくつかの空白を自動的に無視することに注意してください.最初の空白以外の文字から次の空白まで書き始めます.「Hello World」と入力してみると.では、最後に出力される結果は「Hello」になります.
上記の文に対してコードstring s 1を使用する場合.cin>>s>>s1; cout<
スペースを無視しない場合はgetline()関数を使用します.改行するまでスペースは無視されません.
5.stringのempty()とsize()
文字通り、empty()はstringが空の場合に有効であることがわかります.size()は文字列の長さを得る.なお、size()が返すタイプはintまたはunsigned intではない.独自のタイプstring::size_typeタイプ.符号なし整数として十分な大きさであることが理解される.1つの文にsize()が現れた場合、intという記号付き整数などは使用しないことをお勧めします.なぜならs.size()
auto size = s.size();
この方式は妥当だ.
6.stringオブジェクトの文字の処理
文字列内の単一の文字に対して対応する操作を行うことができます.以下に、定義されている非常に有用な関数をいくつか挙げます.
isalnum(c)cがアルファベットまたは数字であるか否かを判断する
isalpha(c)cがアルファベットか否かを判断する
iscntrl(c)cが制御文字であるか否か
isdigit(c)cが数値かどうか
isgraph(c)cがスペースではないが印刷できる場合は真
islower(c)cが小文字かどうか見てみましょう
isprint(c)cが印刷可能文字かどうか
ispunct(c)cが句読点かどうか
isspace(c)cが空白かどうか
issupper(c)cが大文字かどうか
isxdigit(c)cが16進法かどうか
tolower(c)cを小文字に変換
toupper(c)cを大文字に変換
7.範囲for
私たちはforループをよく知っています.ここでは、文字列を一つ一つ処理するときに新しい使用方法を使用します.すなわち範囲for
形式は次のとおりです.
 for(declaration : expression)
        statement;
ここでexpressionは、文字列のような複数の文字部分から順番に構成されたオブジェクトなどのシーケンスオブジェクトです.あとは容器とかも紹介します.例えば文字列の中の文字をすべて大文字にするには
string s = "ttttttttt";
for(auto c : s)
    c = toupper(c);
文字列には、下付きのs[n]を使用して、1つの文字に個別にアクセスできます.使用するときは必ずn境界を越えないように注意してください.
            
Cの文字列に比べて、C++には多くの改善が行われています.仕事を終える.