Вот то, что я до сих пор:Газа/удалить символы из UserInput в C++
string stripSymbols(string str) {
int stringSize = strlen(str.c_str());
for (int i = 0; i < stringSize; i++)
if (str[i] == 0x46)
str[i] = 0x32;
return str;
}
Я знаю, что коды ASCII, вероятно, неверно. Это часть проблемы. Но как только я это выяснил, я подумал, что могу поместить здесь ключ для каждого символа, который заменит каждый символ пустым пространством.
Или еще лучше, я мог бы иметь цикл for в цикле for, который проходит через строку символов и заменяет любое совпадение с вводом пользователя с пустым пространством.
У меня есть пара идей, но мне было интересно, был ли более эффективный способ сделать это.
Update 1:
Этот код выглядит немного лучше и работает:
string stripSymbols(string str) {
int stringSize = str.size();
for (int i = 0; i < stringSize; i++)
if (str[i] == '.')
str[i] = ' ';
return str;
}
Но ответы предлагают более эффективное решение.
Update 2:
Решение вдохновленный ответ Kerrek Саи Бабы:
char symbols [] = {'!', '?', ',', '\'', '.'};
int symbols_size = sizeof(symbols)/sizeof(char);
for (int j = 0; j < symbols_size; j++)
replace(str.begin(), str.end(), symbols[j], ' ');
Если вы не уверены о кодах ASCII, почему бы не использовать буквенные символы вместо использования цифровых кодов и надеясь, что они правы ? –
Jeez ... кто дал вам идею написать 'strlen (str.c_str())' ??? Как насчет 'str.size()'? –
Я согласен с предыдущими комментариями, я просто добавлю: вы можете передать 'str' по ссылке и ничего не возвращать. Насколько я понимаю, вы собираетесь использовать свою функцию следующим образом: 'str = stripSymbols (str);'. – LihO