擦除给定字符串C ++ 11中的特定字符

时间:2017-03-23 08:39:15

标签: string c++11 erase

我会尝试从以下代码中的给定字符串中删除特定字符。

int main(void){
    string query="a*de*da";
    string org;
    uint8_t rmc='*';

    std::vector<string::const_iterator> wpos;
    for(string::const_iterator itr = org.begin();
        itr!=org.end();
        ++itr){
        if(*itr==rmc){
            wpos.push_back(itr);
        }
    }   

    uint64_t wcnt=0;
    for(auto witr: wpos){
         org.erase( witr-(wcnt++) );
    }   
    query=org;
    return 0;                                                                                                                                                                                                 
} 

在这段代码中,我希望查询=“adeda”但是,我收到了错误

 error: no matching function for call to ‘std::basic_string<char>::erase(__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >)’
org.erase(witr-wcnt);

我的实验设置是CentOS6.7上的devtoolset-3的g ++ 4.9.2

1 个答案:

答案 0 :(得分:1)

从C ++ 98到C ++ 11,std::string::erase的签名从

更改
iterator erase(iterator p)

iterator erase(const_iterator p)

似乎g ++ 4.9.2仍然使用旧版本。如果您将string::const_iterator更改为string::iterator,则应编译您的示例。