在 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++ 中替换字符串中的字符的主要内容,如果未能解决你的问题,请参考以下文章

C或C++实现word文档中字符的替换

替换字符串 C++ 位置 X 中的单词

如何使用特定符号 C++ 查找和替换字符串中的所有字符

替换 C++ 字符串中的标点符号

用另一个子字符串 C++ 替换子字符串

C++编程,查找字符串子串并替换。