Я хотел очистить строку от нежелательных символов и попытался повторить ее через цикл, подобный этому.
for(auto it=numer.begin(); it!=numer.end(); ++it)
{
if (*it=='-') numer.erase(it);
}
Ошибка: «ожидаемое первичное выражение перед токеном '='»; Я мог бы, конечно, я мог бы сделать это с оператором []. Но мне интересно, почему это не работает. Я ценю вашу помощь.
it* смысла нет. Вы имели в виду *it. Кроме того, вы должны быть осторожны с редактированием строки, которую вы сейчас повторяете, так как erase сделает недействительным it.
При вызове erase() в ручном цикле вы ДОЛЖНЫ обновить свой итератор возвращаемым значением erase(), поскольку исходный итератор будет признан недействительным. Это означает, что вы не можете увеличивать итератор в определении цикла, вместо этого его нужно увеличивать внутри тела цикла, например: for(auto it = numer.begin(); it != numer.end(); ) { if (*it == '-') it = numer.erase(it); else ++it; }





Если вы хотите удалить все экземпляры символа из строки, простой способ сделать это — использовать стандартную идиому стирания-удаления (если):
numer.erase(std::remove(numer.begin(), numer.end(), '-'), numer.end());
Смотрите также:
Должно быть
*itвместоit*. Проголосовал за закрытие как опечатку.