我创建了一个Url Encoder类,其工作是对Url进行编码或解码。
为了存储特殊字符,我使用了mapstd::map
我已经像这样初始化了地图this-
为了读取给定字符串中的字符,我使用迭代器for(string::迭代器it=input.开始(); it!=input.end();it)
现在当我尝试使用替换函数编码替换一个特殊字符时。替换(位置,1,这个-
我得到以下错误
Url. cpp:在成员函数'std::string Url::Url::UrlEncode(std::string)':
Url.cpp:69:54:error:从'char'到'const char*'[-fpermissive]
/usr/include/c /4.6/bits/basic_string.tcc:214:5:error:初始化参数1'std::basic_string
我不知道代码有什么问题。这是我的功能
string Url::UrlEncode(string input){
short position = 0;
string encodeUrl = input;
for(string::iterator it=input.begin(); it!=input.end(); ++it){
unsigned found = this->reservedChars.find(*it);
if(found != string::npos){
encodeUrl.replace(position, 1, this->reserved[*it]);
}
position++;
}
return encodeUrl;
}
好吧,您的解决方案中的错误是您试图传递单个字符而不是std::字符串
或c-style 0结尾字符串(const char*
)来映射。
std::string::迭代器每次迭代一个char,所以你可以使用std::map
it
是字符的迭代器(它具有类型std::字符串::迭代器
)。因此,*it
是一个字符。
您正在执行保留[*it]
,并且由于您给保留
(std::map的类型
然后编译器尝试从char
到std::string
的用户定义转换,但是没有接受char
的string
构造函数。虽然有一个接受char const*
(参见此处),但是编译器无法将char
转换为char const*
;因此,错误。
另请注意,对于string返回的值,您不应该使用
,而应该使用无符号
::find()string::size_type
。
看起来它的类型和什么不匹配
reservedChars.find()
应该接受。
尝试添加
const char* pit = *it;
就在
unsigned found = this->reservedChars.find(*pit);
if(found != string::npos){
encodeUrl.replace(position, 1, this->reserved[*pit]);