2012-05-24 4 views
-1

Как найти два смежных символа в строке? Мой поиск смежных символов должен учитывать только набор символов, определенных мной.Поиск соседних символов в строке

Я решил свою проблему с помощью этой функции:

unsigned checkField (myset string, char mychar) 
{ 
    unsigned counter; 

    for (counter = 0; counter <= myset.length() - 1; counter + +) 
    if (myset [counter] == mychar) 
    return 1; 

    return 0;/* NOT FOUND */
} 

Это может быть полезным для кого-то в будущем

+0

Вы ищете что-то вроде длинной общей проблемы подстроки? – adelbertc

+0

Нет, я не. Это часть кода калькулятора. Основная идея заключается в том, что мой калькулятор может использовать только переменные char. Например: «B + C + 1 + 3» Его хорошее выражение «BB + C + 1 + 2» Его плохое выражение, я должен остановить свою программу и отправить код ошибки. Его плохое выражение, потому что мои переменные определены с использованием только одного символа. – tiggares

+0

Почему? Почему бы просто не разрешить произвольные имена переменных и не сделать с ними? –

ответ

3

Если это нормально использовать boost, и вам не нужно максимальную эффективность, то самым простым способом может быть использование регулярного выражения, такого как "([abcd])\\1". Подробнее о совпадении строк с регулярными выражениями boost см. the boost regex docs.

0

Я полагаю, что вы храните каждую часть своего уравнения отдельно в какой-то момент? Например. "55" "+" "hh" "+" "bc"? В этом случае было бы недостаточно просто проверить, что sizeof равно 1 и отправить сообщение об ошибке, если нет? Извините, если мне что-то не хватает! В противном случае регулярные выражения, предложенные Эдвардом (+1), кажутся наиболее подходящими.

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

+0

У меня нет уравнения отдельно. У меня есть только строка. – tiggares

+0

Вы можете всегда использовать [strtok] (http://www.cplusplus.com/reference/clibrary/cstring/strtok/), чтобы отделить строку вверх. Я предполагал оценить уравнение, которое вы разделили бы на части? Все еще регулярное выражение и/или strtok должны получить вас там. (Будет ли редактировать ответ, чтобы добавить это, если это поможет). – Nashibukasan

0

быстрой код:

#include <cstdio> 
#include <cstdlib> 
#include <cstring> 

const char* find_adjacent_string(const char* str, const char* set) 
{ 
    const char* loc = NULL; 

    if(set != NULL) 
    { 
     int size = strlen(set); 

     char adj[3]; 
     adj[2] = '\0'; 

     for(int i = 0; i + 1 < size; i++) 
     { 
      adj[0] = set[i]; 
      adj[1] = set[i + 1]; 
      loc = strstr(str, adj); 
      if(loc != NULL) 
      { 
       break; 
      } 
     } 
    } 

    return loc; 
} 

int main() 
{ 
    const char* myset = "pl"; 
    const char* mystr = "apple"; 

    printf("found at %i\n", find_adjacent_string(mystr, myset) - mystr); 

    return 0; 
} 
Смежные вопросы