2011-03-18 50 views
0

我是从一个输入文件中读取:用正则表达式的sscanf在C忽略空格

  # This is a comment 

Matrix A = 
        //NOTICE THIS LINE 


# matrix A (2 diagonal line segments) 

100 100 

200 200 

我想不出如何从没有空格该行提取矩阵A。 现在我有

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

我试图

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

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

和许多其他人

它只是不忽略的空白,它复制它单词变量以及矩阵a。

回答

1

sscanf不处理正则表达式。

+2

他试图用一个扫描组,而不是一个正则表达式 - 和scanf(朋友)* *做手柄的扫描设置。 – 2011-03-19 06:13:09

1

如前所述,sscanf没有正则表达式。它需要一个格式说明符。

这是因为C没有正则表达式。

你要么需要自己分析每一行,或使用正则表达式库如PCRE

+3

scanf * does *有扫描集 - 但这就是他正在尝试使用。 – 2011-03-19 06:23:32

1

这很容易:

char s1[100],s2[100],s3[100]; 
if(3==sscanf(buffer,"%s%s%s",s1,s2,s3) && !strcmp(s2,"A") && !strcmp(s3,"=")) 
    puts(s1); 
2

如果您做了一点点清晰的,你想读什么这将有助于在和你想忽略什么。由于它是不明确的,我要采取一个猜测:

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'; 
} 
+0

只是为了防止上述代码中断:检查“pos> = 0 && isspace(string [pos])”将会防止您的头痛。 – mawia 2011-03-19 06:44:52

+0

@mawia:糟糕 - 非常正确。修正了,谢谢。 – 2011-03-19 07:12:11