在 C++ 中替换字符串中的字符
Posted
技术标签:
【中文标题】在 C++ 中替换字符串中的字符【英文标题】:Replacing characters in a string in C++ 【发布时间】:2013-10-07 18:50:12 【问题描述】:在我的应用程序中,我将从数据库中检索错误消息字符串。我想将数字替换为错误消息。错误消息将是一个 C 风格的字符串,如:
Message %d does not exist
或
Error reading from bus %d
理想情况下,我希望能够使用此语句执行 C 风格的 printf,并将我自己的数字代入其中。我知道我可以手动完成,但有没有更简单的方法可以像字符串一样使用它在普通的 printf 中?
【问题讨论】:
在 libc 中使用sprintf()
有什么问题?
@yan 缓冲区溢出。最好至少使用snprintf
如何使用 sprintf 来做到这一点?假设我将文本读入变量 char *text="Message %d 不存在" 我可以使用它将文本打印到缓冲区,但是如何替换 %d?
@DavidBrown 我不是指sprintf()
,我指的是s*printf()
系列函数。
【参考方案1】:
除了用于简单的字符串连接或将<<
与数字和消息一起使用。
我能想到boost::format
int message_no=5;
std::cout << boost::format("Message %d doesn't exist") % message_no ;
【讨论】:
【参考方案2】:C++的方式是使用std::stringstream:
std::stringstream str;
str << "Message " << messageName << " doesn't exist";
std::string out = str.str();
还有非常不错的仅标题提升string algorithms library:
std::string message = "Message %s doesn't exist";
boost::replace_first( str, "%s", "MyMessage" );
// message == "Message MyMessage doesn't exist"
还有boost::format
,它的作用类似于 printf,但完全是类型安全的,并且支持所有用户定义的类型:
std::string out = format( "Message %1 doesn't exist" ) % "MyMessage";
【讨论】:
boost::format 可能是最接近我正在寻找的东西。谢谢。以上是关于在 C++ 中替换字符串中的字符的主要内容,如果未能解决你的问题,请参考以下文章