Как удалить определенный символ из массива указателей на строку

#c

#c

Вопрос:

Я должен удалить символ c в каждой строке в массиве указателей, но компилятор выдает ошибку, и я не знаю, как решить. Это код:

 for(int k=0;k<A[i][j]->length();k  ){
    if(A[i][j]->at(k)==c){
        (A[i][j]->at(k)).remove();  //error here
    }
}
 

Ошибка:

 [Error] request for member 'remove' in '(*((*(A   ((sizetype)(((long long unsigned int)i) * 8ull))))   ((sizetype)(((long long unsigned int)j) * 8ull))))->std::basic_string<_CharT, _Traits, _Alloc>::at<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)k))', which is of non-class type 'char'
 

Комментарии:

1. Когда вы спрашиваете об ошибке компилятора, полезно на самом деле показать нам ошибку, которую вы получаете.

2. Пожалуйста, добавьте это к исходному вопросу, чтобы его можно было отформатировать немного лучше 🙂

3. Вероятно, вы не хотите вызывать remove() фактический символьный литерал, но вместо этого посмотрите, как remove() его следует вызывать.

Ответ №1:

Вы пытаетесь вызвать remove() тот char , который at() возвращает, а не тот std::string , который вы вызываете at() (и зачем вы at() вообще используете? Ваш цикл уже гарантирует, что вы не выходите за пределы, поэтому дополнительная проверка границ, которая at() выполняется, тратится впустую, вам не нужно).