0

C# では、文字列内に文字列またはその他のデータを含めることができました。例えば:

string myString = "Jake likes to eat {0}", food  

また

Console.WriteLine("Jake likes to eat {0}", food);

これはC++でどのように行うことができますか? 私が書いているプログラムには、次のようなコードがあります。

getline(cin, obj_name);
property_names[j].Set_Type("vector<{0}>", obj_name);

obj_name 値を中かっこ内に配置するにはどうすればよいですか?

4

4 に答える 4

2

obj_name が の場合、std::stringnhgrif が提案したことを行うことができます

"vector<{" + obj_name + "}>"

obj_name が の場合、which と同様の動作をするものchar []を使用できます。sprintfprintf

int sprintf ( char * str, const char * format, ... );
于 2013-10-03T21:40:11.053 に答える
1

c から sprintf() を使用できます。

char buf[1000];
sprintf(buf, "vector<%s>", obj_name);
于 2013-10-03T21:41:52.103 に答える
0

C# から WriteLine にほぼ似た関数を作成できます。

void WriteLine(string const &outstr, ...) {
    va_list placeholder;
    va_start(placeholder, outstr);
    bool found = false;
    for (string::const_iterator it = outstr.begin(); it != outstr.end(); ++it) {
        switch(*it) {
            case '{':
                found = true;
                continue;
            case '}':
                found = false;
                continue;
            default:
                if (found) printf("%s", va_arg(placeholder, char *));
                else putchar(*it);
        }
    }
    putchar('\n');
    va_end(placeholder);
}

同様の議論でそれを呼び出します:

WriteLine("My fav place in the world is {0}, and it has a lot of {1} in it", "Russia", "Mountains");

出力:

My fav place in the world is Russia, and it has a lot of Mountains in it

もちろん、この関数は完全ではありません。なぜなら、C# の System.Console.WriteLine() 関数は順序どおりに引数を持たず、正しい文字列を完全な文字列の正しい場所に配置できるからです。これは、最初にすべての引数を配列に配置し、配列のインデックスにアクセスすることで解決できます

于 2013-10-04T01:31:10.933 に答える
0

C++ の sprintf が恋しくて、もっと C++ っぽいものを使いたい場合は、Boost から format を試してください。

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

using namespace std;
using boost::format;

int main()
{
    string some_string("some string"),
           formated_string(str(format("%1%") % some_string));

    cout << formated_string << endl;

    return 0;
}
于 2013-10-03T22:01:54.397 に答える