文字列を扱う
便利なstring
STLの一部として、string クラスがあります。
これは、従来 char 配列で表現していた文字列を、長さや文字の参照を管理し、連結や部分取りだしなどを可能にしたクラス、という感じです。
Visual C++ の CString や、Borland C++ Builder の AnsiString を使っていると、非常に便利でありがたく思うのですが、これを環境を越えて使えるようにしたもの (ただし、実装系が違うと値の直接渡しはできないと思いますが) が、string です。
演算子のオーバーロードにより、データが直感的に扱えるようになっています。もちろん、データ部分の核は、char 配列ですから、従来のプログラムとの互換性も簡単にとれます。
使い方としては
// 初期化 string str = "This is a test."; // str を文字配列 "This is a test." で初期化 str.assign(carray); // str を文字配列 carray で初期化 // 追加 str = str + anystr; // str に文字列 anystr を付け足す str.append("something"); // str に "something" という文字列を付け足す // 長さ unsigned int len = str.length(); // 文字列 str の長さを求める str.resize(str.length() * 2); // 文字列 str の長さを2倍にする // 挿入 str.insert(pos, "insert it."); // 位置 pos に文字配列 "insert it." を挿入 // 検索 unsigned int comma_pos = str.find('.'); // 文字 '.' を探す // 部分文字列 string partial = str.substr(0, 5); // 0文字目から 5文字取り出す // 従来の文字配列 char* cdata = str.c_str(); // 従来の文字配列にアクセス
などとします。
正規表現
CGI でよく使われる Perl の究極的な強みは、正規表現です。
従来使われていた C や C++ ではできない、この文字列処理を、いとも簡単にやってのける Perl は、その速度的な問題にも関わらず、すぐに CGI プログラミングの標準となりました。
そう、Perl は遅いのです。インタプリタ言語(今風に言うとスクリプト言語…?)ですから。
C++でも正規表現が可能になれば、もっと使いやすくなるはずです。Perlよりも遙かに高速に動作するでしょう。
C++での正規表現実装は、別ページに置きます。