计数Array下标运算符

时间:2015-05-09 16:39:57

标签: arrays python-3.x

我想在.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中写这个吗

编辑:DECLARATION中的运算符无法计算,例如:

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

2 个答案:

答案 0 :(得分:1)

我不懂python ......

然而你的问题似乎很简单。假设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;
}

答案 1 :(得分:0)

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

或更安全:

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

当然,这不能处理所有情况(例如,如果它在一个字符串中,它会计算[)。您可能想要使用正确的解析器。