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

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

MoritaIssei

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