Я хочу удалить апостроф в строке, но это не работает - PullRequest
2 голосов
/ 05 ноября 2011

Я хотел бы удалить апостроф, присутствующий в строке.Я пытался что-то написать, но, похоже, мой синтаксис неправильный.Я не могу понять, где проблема, но я знаю, что что-то не так в моем синтаксисе.Я использую Dev-C ++.

{...
cout<<"enter the word to test "<<endl;
getline(cin,givenword);
string str (givenword);

std::string deleteapostr(givenword);
// trying to delete apostrophe if present in the string
deleteapostr.erase(std::remove_if(deleteapostr.begin(), deleteapostr.end(), '\'', deleteapostr.end());
...
}

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011
  1. remove_if требует предиката для своего третьего аргумента, а не значения элемента. Вы хотите старый добрый remove.

  2. Вам не хватает закрывающей скобки для аргументов remove_if.

deleteapostr.erase(std::remove(deleteapostr.begin(), deleteapostr.end(), '\''), deleteapostr.end());
0 голосов
/ 05 ноября 2011

remove_if принимает 3 аргумента, а не 4, поэтому вся ваша строка erase() испорчена.

Обратите внимание также, что третий аргумент является Predicate, поэтому вместо передачисимвол, который вы хотите удалить, '\'', вы передадите функцию, которая возвращает bool для типа, который повторяется:

bool isApostrophe(char c) { return c == '\''; }
...
deleteapostr.erase(std::remove_if(deleteapostr.begin(), deleteapostr.end(), isApostrophe), deleteapostr.end());

РЕДАКТИРОВАТЬ: std::removeВероятно, лучше для этого случая, но я оставил его как std::remove_if, так как это то, с чего вы начали, и это также дает вам возможность изменить предикат на что-то вроде isPunctuation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...