在C++中替换字符串中的字符

3
在我的应用程序中,我将从数据库中检索错误消息字符串。我想将数字替换为错误消息中。错误消息将是一个类似于C风格的字符串,例如:
Message %d does not exist

或者

Error reading from bus %d

理想情况下,我希望能够使用此语句进行C风格的printf,并替换自己的数字。我知道我可以手动完成,但是否有更简单的方法以类似于常规printf中的字符串的方式来实现?

2
дҪҝз”Ёlibcдёӯзҡ„sprintf()жңүд»Җд№Ҳй—®йўҳеҗ—пјҹ - yan
1
@yan 缓冲区溢出。最好至少使用 snprintf - David Brown
我该如何使用sprintf来完成这个操作呢?假设我将文本读入一个变量char *text="Message %d does not exist"中,我可以使用它来将该文本打印到缓冲区中,但是如何替换%d呢? - nrcrast
@DavidBrown 我指的不是特定的sprintf()函数,而是s*printf()函数族。 - yan
2个回答

1
除了简单的字符串连接或使用<<加上数字和消息外, 我还可以想到boost::format
int message_no=5;
std::cout << boost::format("Message %d doesn't exist") % message_no ;

0

使用 std::stringstream 是 C++ 的方式:

std::stringstream str;
str << "Message " << messageName << " doesn't exist";

std::string out = str.str();

还有一个非常好的头文件库——Boost string algorithms library:

std::string message = "Message %s doesn't exist";
boost::replace_first( str, "%s", "MyMessage" );

// message == "Message MyMessage doesn't exist"

还有{{link1:boost :: format }},它类似于printf,但完全是类型安全的,并支持所有用户定义的类型:

std::string out = format( "Message %1 doesn't exist" ) % "MyMessage";

boost::format可能是我正在寻找的最接近的东西。谢谢。 - nrcrast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接