【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

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

MoritaIssei

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