массивы — указатели / C-строки в C ++. Как отфильтровать строки?

У меня есть массив для фильтрации.

Пример:

str = "hellothere" а также filter = "eo", Что делать, когда мне нужно отфильтровать?

void filter_str(char* str, char* filter, char*result)
{
while(*str)
{
if() //If the current character in str is one to be filter.
{
*str++;
}
else
{
*result++ = *str++;
}

}
*result = '\0';
}

Я просто не могу понять, как проверить, является ли текущий символ тем, который должен быть фильтрован. Так как фильтр может содержать более одного символа, например, «ЭО». Как проверить оба «e» и «o» в каждом цикле, а затем сбросить фильтр обратно на «e» в начале.

Я хотел сделать указатель на начало фильтра, а затем использовать его в конце времени, чтобы вернуться к началу фильтра. Но я не уверен, как сделать так, чтобы * str проверял все фильтруемые символы.

3

Решение

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

if (strchr(filter, *str))

В общем, это ответ на любой вопрос, где у вас есть обработка, которая слишком сложна для вас. Напишите функцию для решения «внутренней» проблемы, а затем используйте эту функцию во «внешней» проблеме. В этом случае внутренняя проблема заключается в поиске символа в строке, а внешняя проблема — операция фильтрации, которую вы выполняете. Вам просто повезло, что внутренняя проблема для вас уже решена.

1

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

Если вы хотите знать, если письмо находится в filter, «простой» способ (без использования функций STL) будет циклически проходить по элементам filter и проверьте каждый из них, чтобы увидеть, если вы найдете персонажа, которого вы ищете.

while(*str)
{
bool found = false;
// For each element in filter {
// If *str == element {
found = true;
break; // This function gets you out of the 'for' loop
}
}

if(found) //If the current character in str is one to be filter.
{

Вы можете заполнить псевдокод в комментариях

0