在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值放在大括号内?
答案 0 :(得分:2)
如果您的obj_name是std::string
,您可以执行nhgrif建议的内容
"vector<{" + obj_name + "}>"
如果您的obj_name是char []
,则可以使用与sprintf
具有类似行为的printf
,
int sprintf ( char * str, const char * format, ... );
答案 1 :(得分:1)
您可以使用c:
中的sprintf()char buf[1000];
sprintf(buf, "vector<%s>", obj_name);
答案 2 :(得分:0)
如果您错过了C ++中的sprintf并希望使用更多C ++'ish,请尝试使用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;
}
答案 3 :(得分: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()函数可以使参数不按顺序排列,并且仍然将正确的字符串放在完整字符串中的正确位置。这可以通过首先将所有参数放在一个数组中并访问数组的索引
来解决