質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

911閲覧

文字列の塊を返したい

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/12/09 10:09

以下のコードですが一番したのprintf();などですがそれを表示するのではなく一つのstd::string型で保存するにはどうすればいいのでしょうか?そしてそれを一つのsts::string型に押し込んで起きたいです。

cpp

1// レンダリング関数 背景色 前景色 文字列 2void ColorPrintf::RenderText(Color_Code Back, Color_Code Front, const char* format,...) { 3 4 5 6 7 //色指定子を取得 8 std::string front = getColorFront(Front); 9 std::string back = getColorBack(Back); 10 11 //文字を生成 12 std::string text; //生成した文字を格納 13 va_list ap; 14 std::string str; 15 va_start(ap, format); 16 vsprintf_s((char*)str.c_str(), sizeof(str.c_str()), format, ap); 17 va_end(ap); 18 text = str; 19 20 //最後に元に戻す 21 std::string reset_front = "\x1b[39m"; 22 std::string reset_back = "\x1b[49m"; 23 24 25 printf("%s%s%s%s%s", front.c_str(), back.c_str(), text.c_str(),reset_back.c_str(),reset_front.c_str()); 26 27 28} 29

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

str = front+ back+ text+ reset_back+ reset_front;

ってはなしかな?

投稿2020/12/09 10:19

y_waiwai

総合スコア87784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

stringstreamを使うのも手かもしれません。

c++

1#include <iostream> 2#include <string> 3#include <sstream> 4 5int main() 6{ 7 auto text1 = std::string("あいうえお"); 8 auto text2 = std::string("かきくけこ"); 9 auto text3 = std::string("さしすせそ"); 10 11 auto ss = std::stringstream(); 12 13 ss << text1 << '\n' 14 << text2 << '\n' 15 << text3; 16 17 std::cout << ss.str() << std::endl; 18 19 return 0; 20}

投稿2020/12/09 10:52

編集2020/12/10 11:22
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2020/12/09 12:55

ssへの挿入(<<)ではstd::endl不要と思います。(仮に改行するにせよ'¥n'で十分かなと。)
退会済みユーザー

退会済みユーザー

2020/12/09 13:38 編集

さきほどなぜなのか調べてみましたが std::endlでは標準出力用のバッファの消去も行ってしまうのですね... 知りませんでした。 確かにこのコードでは改行という意味合いのみでstd::endlを使用しているので 修正しておきます。 教えてくださりありがとうございます。
guest

0

boost/format.hppを使うか,sprintfでchar配列に格納してからstringにします.

c++

1#include <bits/stdc++.h> 2#include <boost/format.hpp> 3using namespace std; 4using namespace boost; 5 6int main() { 7 char c[16]; 8 sprintf(c, "%d %s", 3, "abc"); 9 string s1(c); 10 cout << s1 << endl; 11 12 const string s2 = (format("%d %s") % 3 % "abc").str(); 13 cout << s2 << endl; 14}

投稿2020/12/09 10:35

kairi003

総合スコア1330

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問