提问者:小点点

替换字符串时获取编译错误


我创建了一个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;
}

共3个答案

匿名用户

好吧,您的解决方案中的错误是您试图传递单个字符而不是std::字符串或c-style 0结尾字符串(const char*)来映射。

std::string::迭代器每次迭代一个char,所以你可以使用std::map

匿名用户

it是字符的迭代器(它具有类型std::字符串::迭代器)。因此,*it是一个字符。

您正在执行保留[*it],并且由于您给保留std::map的类型

然后编译器尝试从charstd::string的用户定义转换,但是没有接受charstring构造函数。虽然有一个接受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]);