2012-05-24 38 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; 
}