next up previous contents
Next: D.2.9 sprintf() の代りに Up: D.2 簡単な入門 Previous: D.2.7 浮動小数点数の書式指定 (2) 安直な

D.2.8 文字列

string クラスについて一通り。 古い C++ のテキストでは文字列クラスを作ってみせるのが 定番という雰囲気もあったが (それどころか C 風の文字列の説明を 一所懸命している本もまだ珍しくはない)、 標準 C++ ライブラリィに含まれるようになったので、 もうその利用方法を学ぶ時期でしょう。

string1.C

#ifdef __FreeBSD__
#include <iostream.h>
#else
#include <iostream>
#endif

#include <string>
using namespace std;

void add_newline(string &s)
{
  s += '\n';
}

int main()
{
  // string に文字列リテラルを代入できる
  string s1 = "Hello";
  string s2 = "world";

  // string は + 演算子で、string, 文字列リテラル, 文字を結合できる
  string s3 = s1 + ", " + s2 + '!';

  add_newline(s3);
  cout << s3;

  // string 同士、string と文字列リテラルは == で比較できる
  if (s3 == "Hello, world!\n")
    cout << "Equal" << endl;

  // C 形式の文字列は c_str() メンバ関数で得られる。
  cout.form("%s\n", s1.c_str());

  // 一行丸々入力するには getline()
  string line_input;
  cout << "input a line" << endl;
  getline(cin, line_input);
  cout << "入力された行は" << line_input << endl;
}
string1.out

mathpc00% ./test-string1
Hello, world!
Equal
Hello
input a line
To be to be, ten made tobe!
入力された行はTo be to be, ten made tobe!
mathpc00%

test-string1.C

#include <iostream.h>
#include <string>

int main()
{
  string s1 = "aa";
  string s2("bb");
  string s3;

  s3 = s1 + s2;
  cout << s1 << endl;
  cout << s2 << endl;
  cout << s3 << endl;
  for (int i = 0; i < 5; i++)
    s3 += s3;
  cout << s3 << endl;
  for (size_t i = 0; i < s3.length(); i++)
    cout << s3[i];
  cout << endl;

  // 部分文字列について
  s3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  cout << '"' << s3 << '"' << "という文字列について" << endl;
  string first10(s3, 0, 9);
  string cut_first10(s3, 10);
  cout << "最初の10文字" << first10 << endl;
  cout << "最初の10文字をカット" << cut_first10 << endl;
  return 0;
}


next up previous contents
Next: D.2.9 sprintf() の代りに Up: D.2 簡単な入門 Previous: D.2.7 浮動小数点数の書式指定 (2) 安直な
Masashi Katsurada
平成18年4月28日