首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Char*改为char*

将Char*改为char*
EN

Stack Overflow用户
提问于 2016-06-17 22:14:42
回答 2查看 560关注 0票数 0

我想用boost类php代替我的文本。

代码语言:javascript
复制
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”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-17 22:17:30

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

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

票数 2
EN

Stack Overflow用户

发布于 2016-06-17 22:23:08

实际上,对于像这样琐碎的事情,不需要使用boost。

代码语言:javascript
复制
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 < k,然后是i < 5)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37891119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档