【C++入門】boost::format関数で書式を整える方法

こんにちは、プログラマーの森田です。C++のboostライブラリには、文字列の書式を整えるためにformat関数が用意されています。今回は、

  • boostライブラリのインストール方法
  • format関数の使い方
  • 整数の桁を揃える方法
  • 小数の精度を揃える方法
  • string型に変換する方法

というように、基本的な内容から応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、format関数のさまざまな使い方をわかりやすく解説します!

目次

boostライブラリとは

boostライブラリを使うことで、C++の機能を拡張してより複雑なことを行うことができます。ただ標準で入っているライブラリではないので、インストールをする必要があります。

また競技プログラミングでは使用することができないことが多いので注意してください。

macでのインストール方法

macでインストールするために、Homebrewというパッケージ管理ツールをインストールします。まずMacでターミナルを開き、以下のコマンドを入力します。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次にこれを使ってBoostライブラリをインストールします。

brew install boost

これでformat関数などを使う準備ができました。

Windows(Visual Studio)でのインストール方法

まず以下のサイトからZipファイルをダウンロードして解凍をします。

https://www.boost.org/users/history/version_1_67_0.html

その後解凍したファイルをドキュメントフォルダなどの任意の場所に移動します。次にVisual Studioを開き新たにプロジェクトを作成します。作成したらプロジェクトのプロパティを開きます。

「C/C++」の「全般」の部分にある「追加のインクルードディレクトリ」に先ほど移動したファイルのパスを入力します。さらに「C/C++」の「プリコンパイル済みヘッダー」にある「プリコンパイル済みヘッダー」を使用しないに変えます。

format関数の使い方

format関数を使うためには、「boost/format.hpp」をインクルードします。以下のようにformat関数では%マークを使って文字列に加えたい値をセットします。

boost::format(書式文字列) % 加えたい値;

値を加える場所を指定するときには、%1%や%2%などのように番号を使うか、printfと同じように%dを使います。

次のプログラムで確認してみましょう。

#include <iostream>
#include <boost/format.hpp>
#include <string>

int main() {
    int age = 18;

    std::string job = "samurai";

    std::cout << boost::format("my age:%1%njob:%2%") % age % job << std::endl;

    return 0;
}

実行結果:

my age:18
job:samurai

このように%1%、%2%のように使うことで1番目、2番目にセットされた値の場所を指定することができます。

整数の桁を揃える方法

空白埋めで揃える方法

書式を変更したい場合は以下のように設定します。

%|番号$書式|

もしくは番号を使わずに入力された順序で使う場合は、

%|書式|

と書くことができます。

例えば5桁で桁を揃えたい場合は以下のように設定します。

boost::format("num1:%|1$5|nnum2:%|2$5|") % 1 %100;
boost::format("num1:%|1$5d|nnum2:%|2$5d|")% 1 %100;

以下のように番号を使わずに、書くこともできます。

boost::format("num1:%|5|nnum2:%|5|") % 1 %100;
boost::format("num1:%5dnnum2:%5d")% 1 %100;

次のプログラムで確認してみましょう。

#include <iostream>
#include <boost/format.hpp>
#include <string>

int main() {
    int num1 = 18;

    int num2 = 2018;

    std::cout << boost::format("num1:%|5|nnum2:%|5|") % num1 % num2 << std::endl;

    return 0;
}

実行結果:

num1:   18
num2: 2018

このように%|5|とすることで5桁に揃えて数値をみやすくすることができます。

小数の精度を揃える方法

小数の精度を揃えるときには、以下のように設定します。

boost::format("num1:%|.精度|nnum2:%|.精度|");

次のプログラムで確認してみましょう。

#include <iostream>
#include <boost/format.hpp>
#include <string>

int main() {
    float num1 = 1.0 / 3.0;

    float num2 = 1.0 / 7.0;

    std::cout << boost::format("num1:%|.4|nnum2:%|.4|") % num1 % num2 << std::endl;

    return 0;
}

実行結果:

num1:0.3333
num2:0.1429

このように%|.4|とすることで小数点第4位までを表示させることができます。

string型に変換する

str関数を使うことで結果を文字列に変換することができます。以下のように使います。

(boost::format(書式) % 値 % 値).str();

次のプログラムで確認してみましょう。

#include <iostream>
#include <boost/format.hpp>
#include <string>

int main() {
    float num1 = 1.0 / 3.0;

    float num2 = 1.0 / 7.0;

    std::string str = (boost::format("num1:%|.4|nnum2:%|.4|") % num1 % num2).str();

    std::cout << str << std::endl;

    return 0;
}

実行結果:

num1:0.3333
num2:0.1429

このようにformat関数で作られた書式付き文字列をstr関数を使うことで、string型の文字列に変換することができます。

まとめ

いかがでしたか?今回はboostライブラリのインストール方法とboost::format関数の使い方を解説しました。

format関数を使うことで文字列の書式を変更し、その結果を文字列に変換することができます。もし、文字列の書式を変更する方法を忘れてしまったらこの記事を確認してください。

この記事を書いた人

ご閲覧いただきありがとうございます。森田一世と申します。プログラマーとしてRaspberry piを使ったり、記事を作成しています。

目次