解决标准::替换编译错误
Resolve std::replace compile errors
我有下面的代码行
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
输入参数可能有什么问题?
我相信
错误是因为"I"
的类型是const char[2]
的,"you"
的类型是const char[4]
的,而不是您可能期望的char*
。
数组在需要时衰减到指针,但模板类型推导不会自动执行此操作。
还要记住,使用 std::replace
您将需要替换原始字符串中的单个元素,因此仅使用 char
.
用"you"
替换"I"
的简单替代代码片段是;
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
std::string inStr = "I go, I walk, I climb";
//std::replace( inStr.begin(), inStr.end(), "I", "you");
auto at = inStr.find("I");
while (at < inStr.size()) {
inStr.replace(at, 1, "you");
at = inStr.find("I");
}
cout << inStr << endl;
}
您可以在此处使用 MS 在线编译器来验证代码。
std::replace
用于将容器中的单个元素替换为另一个元素。对于 std::string
上的std::replace
,您只能将字符串容器中的一个字符替换为另一个字符。
这对
你有用,问题是因为"I"
的大小和"You"
不同"
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);
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译