2015-05-09 37 views
0

我想寫一個數組下標運算符出現在.c文件中的計數器。問題是輸入文件可能非常複雜,例如:數組下標運算符的計數

string[0] = 'R'; 
a[1] = 0; 
a[ 1] = 0; 
a[1 ] = 0; 
a[ 1 ] = 0; 
a[1+i] = 0; 
a[ 1+i] = 0; 
a[1+i ] = 0; 
a[ 1+i ] = 0; 
a[ 1 + i ] = 0; 

a[a[0] + a[a[0]+1] + i] = 0; 
a[a[0] + a[a[0]+1] + i] = (int)a[a[a[a[a[(int)i]]]] + i]; 

a = "retezec"[0]; 
a = (p1+p2)[0]; 

multiarray[1][2] [3] [4] 
[5] = 0; 

// int *getArray(int a){ 
// return a; 
// } 

getArray(a)[0] = getArray(a)[1] 
getArray(a)[i+1] = getArray(a)[i+1] 
getArray(
a 
) 
[i+1] = getArray(
a 
) [i+1] 

...其中是36個數組下標操作符。 你有任何想法如何在Python

編輯寫:在運營商的聲明不能算作,如:

int field[1][a]; //0 operators !! 
field[2][4];  //2 operators 

回答

1

我不知道蟒蛇...

但是你

問題似乎很簡單。假設c代碼沒有錯誤,你可以只計算'['出現次數。

所以在C++中,它可能看起來像

for (int n=0; n < stringOfText.length(); ++n) 
    if (stringOfText[n] == '[') 
     arraySubscriptOperatorCounter++; 

調整 所以它會滿足您的要求(C++,並且不包括獲取從文件文本將增加要求

#include <iostream> 

inline size_t findNext (const std::string& s, char c, size_t pos =0, bool reverse =false) { 
    if (reverse) 
     return s.substr(0,pos).rfind(c); 
    else if (!reverse) 
     return s.substr(pos).find(c); 
} 

int main() { 
    std::string s; 
    int opCount(0); 
    for (int n(0); n < s.length(); ++n) { 
     if (s[n] == '[') { 
      size_t prev_sem = findNext(s, ';', (size_t)n, true); 
      size_t prev_equ = findNext(s, '=', (size_t)n, true); 
      size_t next_sem = findNext(s, ';', (size_t)n); 
      size_t next_equ = findNext(s, '=', (size_t)n); 

      if (prev_sem == std::string::npos) 
       prev_sem = 0; 
      if (prev_equ == std::string::npos) 
       prev_equ = 0; 


      if (prev_equ > prev_sem) { 
       opCount++; 
      } 
      else if (next_equ < next_sem && next_equ != std::string::npos) { 
       opCount++; 
      } 
     } 
    } 
    std::cout << opCount; 
} 
+0

檢查編輯的問題,在這種情況下,您的解決方案將不起作用 – DRINK

+0

它必須是python嗎?(我不能評論這個問題) –

+0

我使用python,但如果你在另一種語言幫助我,它會是很有幫助。 – DRINK

0
>>> open('test.c').read().count('[') 
36 

或更安全:

>>> with open('test.c') as f: f.read().count('[') 
36 

當然不能處理所有情況(例如,如果它在字符串中,則計數[)。您可能想要使用適當的解析器。

+0

檢查編輯的問題,在這種情況下,您的解決方案將無法工作 – DRINK

+0

@DRINK在這種情況下,我的「你可能會想要使用合適的解析器。「部分適用。 –