読者です 読者をやめる 読者になる 読者になる

Accelerated C++ 第1章 「string を使う」

Accelerated C++―効率的なプログラミングのための新しい定跡 (C++ In Depth Series)

Accelerated C++―効率的なプログラミングのための新しい定跡 (C++ In Depth Series)

  • 作者: アンドリューコーニグ,バーバラ・E.ムー,Andrew Koenig,Barbara E. Moo,小林健一郎
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/12
  • メディア: 単行本
  • 購入: 8人 クリック: 81回
  • この商品を含むブログ (42件) を見る

#include <iostream>
#include <string>
int main()
{
	// ユーザに名前を聞く
	std::cout << "あなたの姓を入力してください: ";
	// 姓を読み込む
	std::string name;	// nameの定義
	std::cin >> name;	// nameに読み込む
	// あいさつを書く
	std::cout << "Hello, " << name << "!" << std::endl;
	return 0;
}

1.1 入力

std::string name;

型が std::string で名前が name である変数を定義。
中カッコの中でのみ有効な変数なためローカル変数と呼ばれる。
変数だけ定義した場合、その値は自動的に初期化される。

std::cin >> name;

std::cin から name に読み込む。
一般に、入出力ライブラリはバッファと呼ばれる内部的なデータ構造に出力されるべきものを貯め、出力を最適化する。このような出力をフラッシュと言う。

バッファをフラッシュする3つのケース
  1. バッファが一杯になったとき
  2. ライブラリが標準入力ストリームから読み込むよう要求されたとき
  3. プログラマが明示的にフラッシュを要求したとき

std::endl は改行を出力したあとにバッファをフラッシュさせる。

1.2 名前にフレームをつける

#include <iostream>
#include <string>

int main()
{
	// ユーザに名前を聞く
	std::cout << "あなたの姓を入力してください: ";
	// 姓を読み込む
	std::string name;
	std::cin >> name;
	// 後で使うため、あいさつのメッセージを作る
	const std::string greeting = "Hello, " + name + "!";
	// 2行目と4行目
	const std::string spaces(greeting.size(), ' ');
	const std::string second = "* " + spaces + " *";
	// 1行目と5行目
	const std::string first(second.size(), '*');
	// すべてを出力する
	std::cout << std::endl;
	std::cout << first << std::endl;
	std::cout << second << std::endl;
	std::cout << "* " << greeting << " *" << std::endl;
	std::cout << second << std::endl;
	std::cout << first << std::endl;
	return 0;
}
  • 変数greetingは定義と同時に初期化されている
  • 変数と値の型が違う場合、値の最初の型を変数の型に変換する
  • string と文字列リテラルをつなぐのには +演算子を使う。
  • ある演算子が異なる型のオペランドについて違った作用をするということを、その演算子オーバーロードされていると言う。
  • 定数を宣言したいときはconstを付ける。
  • greeting.size()はstd::string型のオブジェクトであるgreetingが持つメンバ関数size()を呼び出している。

1.3 詳細

char

コンパイラが定義している型で普通の英文字を保持する組み込み型。

wchar_t

日本語などのワイド文字を保持できる大きな組み込み型。

std::string z(n, c);

z を std::string のオブジェクトとして定義し、その値を char型の文字 c を n 個コピーしたものとして初期化する。