解决std :: replace编译错误

时间:2016-01-27 06:17:48

标签: c++

我有以下代码行

std::string inStr = "I go, I walk, I climb";
std::replace( inStr.begin(), inStr.end(), "I", "you");//C2782

使用上面的代码行,我收到了编译错误

error C2782: 'void std::replace(_FwdIt,_FwdIt,const _Ty &,const _Ty &)' : template parameter '_Ty' is ambiguous

in输入参数有什么问题?

3 个答案:

答案 0 :(得分:4)

我认为错误是因为"I"的类型是const char[2]"you"的类型是const char[4]而不是{{} 1}}你可能会期待。

数组在需要时衰减到指针,但模板类型推导不会自动执行。

请记住,使用std::replace,您需要替换原始字符串中的单个元素,因此只能使用char*

char替换"I"的简单替代代码段是;

"you"

您可以使用MS online compiler here验证代码。

答案 1 :(得分:1)

std::replace用于将容器中的单个元素替换为另一个元素。对于std::replace上的std::string,您只能将一个字符替换为字符串容器中的另一个字符

答案 2 :(得分:-1)

这对您有用,问题是由于"I""You"的大小不同而且#34;

replace(inStr.begin(), inStr.end(), 'I', 'Y');

试试这个,

size_t subStrinPos = -1;
do{
    subStrinPos = inStr.find('I', 0);
    if (subStrinPos != -1)
        inStr.replace(subStrinPos, strlen("I"), "You");
} while (subStrinPos != -1);