我想在.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
答案 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
当然,这不能处理所有情况(例如,如果它在一个字符串中,它会计算[
)。您可能想要使用正确的解析器。