Regex с sscanf в c игнорируя пробелы - PullRequest
0 голосов
/ 18 марта 2011

Я читаю из входного файла:

          # This is a comment

 Matrix A =
                    //NOTICE THIS LINE


# matrix A (2 diagonal line segments)

100 100

200 200

Я не могу понять, как извлечь Матрицу А из этой строки без пробелов. Прямо сейчас у меня есть

sscanf(buffer,"%s%*[^\n]", word);

Я пытался

sscanf(buffer,"%*[ ]%s%*[^\n]", word); 

и

sscanf(buffer," %s%*[^\n]", word); 

и многие другие

Он просто не игнорирует пробелы, он копирует его в переменную word, а также в матрицу a.

Ответы [ 4 ]

2 голосов
/ 19 марта 2011

Было бы полезно, если бы вы немного прояснили, что именно вы хотите прочитать, а что хотите игнорировать. Поскольку это не ясно, я собираюсь сделать предположение:

sscanf(input_line, " %[^=]", matrix_name);

То, что будет покидать конечный пробел, тем не менее, так что вам нужно будет обрезать это отдельно:

rtrim(matrix_name);

Где rtrim - это что-то вроде (игнорирование здравомыслия / проверки ошибок для ясности):

// warning: untested code.
void rtrim(char *string) { 
    int pos;

    for (pos=strlen(string); pos >= 0 && isspace(string[pos]); --pos)
        ;
    string[pos] = '\0';
}
1 голос
/ 18 марта 2011

Как уже упоминалось, sscanf не имеет регулярных выражений. Требуется спецификатор формата.

Это потому что C не имеет регулярных выражений.

Вам нужно либо разобрать каждую строку самостоятельно, либо использовать библиотеку регулярных выражений, такую ​​как PCRE

1 голос
/ 18 марта 2011

Это просто:

char s1[100],s2[100],s3[100];
if( 3==sscanf(buffer,"%s%s%s",s1,s2,s3) && !strcmp(s2,"A") && !strcmp(s3,"=") )
  puts(s1);
1 голос
/ 18 марта 2011

sscanf не обрабатывает регулярные выражения.

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