我有以下代码行
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输入参数有什么问题?
答案 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);