У меня есть массив для фильтрации.
Пример:
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 проверял все фильтруемые символы.
В этом случае уже была написана функция, которая сделает за вас тяжелую работу.
if (strchr(filter, *str))
В общем, это ответ на любой вопрос, где у вас есть обработка, которая слишком сложна для вас. Напишите функцию для решения «внутренней» проблемы, а затем используйте эту функцию во «внешней» проблеме. В этом случае внутренняя проблема заключается в поиске символа в строке, а внешняя проблема — операция фильтрации, которую вы выполняете. Вам просто повезло, что внутренняя проблема для вас уже решена.
Если вы хотите знать, если письмо находится в 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.
{
Вы можете заполнить псевдокод в комментариях