ホームに戻る
 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

inserted by FC2 system