ホームに戻る
STL(string)
/*
*
* STL(string)
*
* 文字列を扱うSTLのクラス
*
* 宣言
*
* string s;
*
* 文字列の代入
*
* s = "str"; // str という文字列を代入
*
* 文字列の結合
*
* s += "str"; // 文字列 s の後ろに文字列 str を結合
*
* 文字列の長さ
* 2バイト文字なら長さは 2 で数える。
* ヌル文字という概念は無い
*
* s.length(); // 文字列のバイト数を返す
*
* 終端の検出
*
* if(pos == string::npos){
* // 終端である
* }
*
* 文字列検索
*
* pos = s.find("str", n); // n 文字目から数えて str がある位置 pos を返す
*
* 文字列を挿入する
*
* s = s.insert(pos, "str"); // pos 文字目に str を挿入
*
* 文字列を削除する
*
* s = s.erase(pos, n); // pos 文字目から n バイト文字削除
*
* 文字列の置き換え
*
* s = s.replace(pos, n, s2); // pos 文字目から n バイト文字を s2 に置き換え
*
* Cのポインタとの互換性
*
* s.c_str()); // Cの文字列ポインタを返す
*
*/
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
void print(string &s){
cout << "length=" << s.length() << endl;
cout << s << endl;
}
int main(){
string s1, s2, s3;
s1.reserve(64);
s1 = "0abcd1abcd2abcd3a";
s2 = "bcd";
s3 = "bcdbcd";
print(s1);
s1 += s2;
print(s1);
unsigned int pos = 0;
while(1){
pos = s1.find(s2, pos);
if(pos == string::npos)break;
s1 = s1.replace(pos, s2.length(), s3);
pos += s3.length();
}
print(s1);
s1 = s1.insert(0, "s");
print(s1);
pos = s1.find(s3, 0);
if(pos != string::npos){
s1 = s1.erase(pos, s3.length());
}
print(s1);
return 0;
}
結果
length=17
0abcd1abcd2abcd3a
length=20
0abcd1abcd2abcd3abcd
length=32
0abcdbcd1abcdbcd2abcdbcd3abcdbcd
length=33
s0abcdbcd1abcdbcd2abcdbcd3abcdbcd
length=27
s0a1abcdbcd2abcdbcd3abcdbcd