【问题标题】:Char* replace with char* [closed]char* 替换为 char* [关闭]
【发布时间】:2016-06-17 22:14:42
【问题描述】:

我想用 php 之类的 boost 替换我的文本。

char* find = "a abc text";
char* search[] = { "a", "b", "c", "d", "e" };
char* replace[] = { "f", "g", "h", "i", "j" };
boost::replace_all(find, search, replace);

但他不能将“char* const”转换为“int”。

【问题讨论】:

  • 看来您正在尝试做类似的事情:this 您可能想看看 replace_all 是如何工作的,您没有传递字符串进行搜索和替换。
  • “他不能转换”不是一个好的、科学的问题描述。为了使这个问题成为 SO 的好问题,请详细描述您面临的问题,包括错误消息以及您为解决这些问题所做的工作。

标签: c++ string boost replace char


【解决方案1】:

在 C++ 字符串文字(如 "a abc text")是只读,尝试修改字符串文字将导致未定义的行为。这就是为什么您显示的代码应该导致编译器向您发出警告(您有一个指向 const 数据的非常量指针),如果编译器没有警告您,那么您需要启用更多警告。指向字符串文字的指针应始终为 char const* 或更常见的 const char *

如果你想要一个可修改的字符串,使用std::string(或者如果你想要C风格的字符串使用char的数组,比如char find[] = "a abc text")。

【讨论】:

    【解决方案2】:

    你实际上不需要为像这样微不足道的事情使用 boost。

    char value[]        = "foobar";
    const char *search  = "abcde";
    const char *replace = "fghij";
    
    size_t i, j, k = strlen(value);
    
    for (i = 0; i < 5; i ++) {
        for (j = 0; j < k; j ++) {
            if (value[j] == search[i])
                value[j] = replace[i];
        }
    }
    

    请注意,此代码假定searchreplace 中有5 个字符。另请注意,如果searchreplace 重叠,则会出现意外行为。如果这对您很重要,您应该切换 for 循环的顺序(即首先是 j &lt; k,然后是 i &lt; 5)。

    【讨论】:

    • 但是将逻辑封装在一个函数中更具表现力,使用已经为您制作并经过良好测试的函数更方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多