Поиск символа и/или регулярного выражения с помощью fgets

У меня есть простой блок кода, который читает строку в файле с помощью fgets(). Теперь я хочу выполнить поиск в этой строке, если есть «{» или «}», и поставить комментарий для игнорирования прокомментированных. Для функций { и } я хочу добавить такой комментарий //Это хороший { . Как мне удалось это сделать? Должен ли я использовать регулярное выражение? Я удалил цикл while, чтобы упростить построчную итерацию.

Могу ли я как-то использовать mystring, который я считаю массивом? Могу ли я добавить строку mystring для ее изменения? Или то, что мне нужно сделать, это создать новый массив, поместить в него мою строку, а затем добавить комментарии.

Например: myfile.txt

/* Hello {} */
function
{
  hello();
}

Выход

/* Hello {} */ //Ignored
function
{ //This is a good {
  hello();
} //This is a good }

Мой простой блок:

#include <stdio.h>
int main()
{
    FILE * pFile;
    char mystring [100];

    pFile = fopen ("myfile.txt" , "r");
    if (pFile == NULL) perror ("Error opening file");
    else {
        if ( fgets (mystring , 100 , pFile) != NULL )
            puts (mystring);
        fclose (pFile);
    }
    return 0;
}

person metraon    schedule 25.01.2013    source источник


Ответы (2)


Вот простой подход, как вы могли бы обработать свою строку mystring.

char *ptr=strchr(mystring,'{');
if(ptr)
{  
   sprintf(mystring,"%s //This is a goof {",mystring);
}
else
{
  ptr=strchr(mystring,'}');
  if(ptr)
  {
     sprintf(mystring,"%s //This is a goof }",mystring);
  }
}

Надеюсь это поможет.

person askmish    schedule 25.01.2013
comment
Знаете ли вы, почему, если я поставлю: char *ptr=strchr(str,'{\0'); он обнаруживает все разрывы строк для каждой строки в моем файле? Я хотел быть умным, поэтому я сказал просто обнаружить {, за которым следует конец строки, поэтому тот, что в комментарии, будет проигнорирован? - person metraon; 26.01.2013
comment
strchr ищет только один символ в заданной строке. Для поиска с конца строки вы можете использовать strrchr. Эти функции возвращают первое вхождение символа в заданную строку. Используя арифметику указателя, вы можете определить, является ли его последний символ в строке или нет. - person askmish; 26.01.2013

Это может быть полезно http://www.lemoda.net/c/unix-regex/index.html.

Код могу подсказать..

person Himz    schedule 25.01.2013