2013-02-22 41 views
0

我目前正在研究一段代碼,我不知道如何解決這個問題。生病說明情況:從C中的char數組中減去一條信息

這段代碼的目標是使C中的「動態」矩陣使用「與fgets」我得到一個字符數組,我的代碼解釋第一線作爲字符數組。然而,我現在有更多的線只對第一個感興趣,其他線只包含我需要存儲的信息。

爲什麼我只在第一行有興趣的原因是因爲它包含了矩陣需要多大是符合以下所有信息的信息。信息出現在一個模式中,它總是以x,y的形式出現。 x和y不相互約束,x可以比y小10倍或更多。此外,線上信息的位置未設置,它可能會浮動在屏幕的右側或左側。

是否有任何形式的,就像在Java正則表達式,我可以用它來過濾這些信息?例如,在第一行中查找「,」,當它被發現時,從「,」一直到第一個空白處檢查右側和左側,並將這兩個值存儲在變量中。

例如:

[     14,10   ] 

帶來的將是再:

int rowSize = 14; 
int columnSize = 10; 
+2

[消除空白](http://stackoverflow.com/questions/1458131/remove-extra-white-space-from-inside-a-c-string)。 – 2013-02-22 23:50:32

+0

好主意,所以我有一個想法。如果我先消除空白區域,則最終將得到一個由2個數字組成的數組,其中只有一個「,」分隔。那麼是否有可能將數組拆分爲「,」,最終以2個數字結尾? – 2013-02-23 00:02:18

+0

當然是。 – 2013-02-23 00:07:02

回答

1

爲什麼不尋找的第一個有效的十進制字符?第一個是

#include <ctype.h> 
#include <stdlib.h> 
#include <stdio.h> 

char *first_digit(const char *s) 
{ 
    while (!isdigit(*s)) s++; 
    return s; 
} 


int main() 
{ 
    const char *line = "[    14,  10  ]"; 
    int n, k; 

    const char *first = first_digit(line); 
    const char *end; 
    n = strtol(first, &end, 10); 

    const char *second = first_digit(end); 
    k = strtol(second, NULL, 10); 

    printf("n, k = %d, %d\n", n, k); 
    return 0; 
} 
+0

謝謝你的回答!但我認爲我會堅持羅伯特哈維提出的計劃,只是爲了學習的好處。 – 2013-02-23 00:03:51