Проверка строки на наличие первого символа, не сохраненного в другой строке (C ++)

Мне нужно создать функцию, которая будет удалять определенные нежелательные символы из начала и конца строки, но не из середины.

Ex) &#@%)Алфавитный суп)()% будет производить Алфавитный суп

Мне нужно сделать это с помощью строковых функций зиЬзЬг, find_first_of, а также find_last_of, и строка, содержащая символы, которые должны быть удалены.
Я попытался сделать это с помощью этой строки кода:

temp = temp.substr(temp.find_first_of(!badchars), temp.find_last_of(!badchars));

Но G ++ дал ошибку, которая сказала! это не оператор, который я могу использовать для строк.
Итак, я думаю, что я спрашиваю, есть ли способ сделать это с этими параметрами?

-3

Решение

String.find_first_of это функция, которая принимает строку стиля c (массив символов) в качестве входных данных. Что бы вы хотели сделать, добавив ! впереди — скажите функции найти любые символы, которых нет в вашем списке, но для этого вам нужно начать со списка всех возможных символов Юникода и удалить те из них, которые есть в вашем списке. badchars список. Компилятор также не может понять, что вы имеете в виду, потому что строки обычно представляют собой не список возможных символов, а скорее последовательность символов. Так !badchars может так же легко означать string is null или же reverse string, В C++ ! Оператор даже не определен для строк, поэтому компилятор жалуется на это.

Что вы хотите сделать, это использовать find_first_not_of а также find_last_not_of, но вы упоминаете, что вы не должны их использовать. Вместо этого вам нужно пройти начало строки по одному символу за раз, пока вы не перестанете видеть какие-либо символы в badlist, Для этого мы будем продолжать увеличивать второй аргумент find_first_of пока он не перестанет возвращать номер, с которого мы начинаем, вот так.

// find the character immediately after any initial sequence of bad characters.
int start = 0;
while(temp.find_first_of(badlist, start) == start){start++;}
// now start is the index of the first character not in our list.

Теперь у нас есть начало желаемого результата, но нам все еще нужно найти конец. Для этого мы в основном будем делать то же, что и выше, в обратном порядке.

// find the character immediatly preceding the last sequence of bad characters
int end = temp.length - 1; // last index of the string
while(temp.find_last_of(badlist, end) == end){end--}

На данный момент у нас есть start а также end желаемого вывода для строк, которые содержат по крайней мере несколько символов для вывода. Я оставлю логику, чтобы определить, состоит ли строка целиком из badlist персонажи для читателя.

1

Другие решения

Итак, ваш алгоритм

Укажите начало строки. Пока у нас есть символы в наборе удаления, удалите символы из строки (указатель приращения).
Укажите конец строки. (Осторожно, это может быть пустая строка). Пока у нас есть символы в строке и символы в наборе удаления, удалите символы из строки (указатель декремента).

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

Я использовал термин «указатель», но целые числа вполне подойдут. Код можно написать очень просто и естественно, используя функцию c strchr () и вызывая ее с набором удаления.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector