Найти определения строк, содержащих слово, в файле C - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно найти все определения строк в проекте C, который содержит определенное слово.

Например, для файла с именем test.c:

int main(int argc, char** argv)
{
  int hello = 0;
  string str = "hello world";
  printf(str); 

  return 0;
}

Ожидается:

print(check_code_for_word_in_str('test.c','hello'))
>>> ./test.c:4: string str = "hello World";

Было бы неплохо, если бы также отображался номер строки, в которой находится строка. Обратите внимание, что переменная hello = 0 не печатается.

Я проверил похожие вещи с кодом ats синтаксического анализа python. Но не знаю, как это сделать для кода c.

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

если есть многострочная строка, вы можете разделить строку на массив строк, который мы можем построить, пройдя исходную строку и сохранив ее в массиве, а когда появится '\ n', мы увеличим индекс и сохраним это в следующем элементе массива, это может помочь нам определить, в какой строке появилось слово.

Затем, чтобы найти брод, мы можем пройти каждый из элементов массива, пройти каждый из всей строки и сравнить его с соответствующим словом, вы можете использовать алгоритм с двумя указателями для сравнения (один для обхода, а другой для слова), потому что для использования strcmp () нам нужно разделить массив или выделить слова в двух указателях al go, когда второй указатель достигает конца слова, тогда мы можем вывести индекс + 1, который является строкой и «найден», или мы также можем сохранить его в счетчике, чтобы узнать, сколько раз слово встречалось в указанной c строке.

0 голосов
/ 17 июня 2020

Попробуйте сделать следующее:

grep -nE "\"[^\"]*hello[^\"]*\"" *.c

Результат в вашем случае:

test.c:4:  string str = "hello world";

Он ищет места, где слово «привет» появляется после начала строки. , но до закрытия строки. Возможно, он не идеален, но может быть достаточно хорош для вашего случая использования.

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