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 是 a std::string,您可以执行 nhgrif 建议的操作

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

如果您的 obj_name 是 a char [],您可以使用sprintfwhich 具有与 类似的行为printf

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 中的格式。

#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 回答