2011-06-30 48 views
-2

下面給出的解析字符串是我的字符串我如何使用C

char test[1000]="$GPGSA,A,3,14,20,22,25,31,32,,,,,,,2.4,1.4,1.9*3A 
    $GPGSV,4,1,16,31,76,060,35,14,28,070,34,20,32,309,32,32,61,309,32*72\n 
    $GPGSV,4,2,16,25,21,053,29,24,37,258,29,23,14,277,27,12,,,21*44\n 
    $GPGSV,4,3,16,22,13,133,20,11,20,272,,16,11,161,,30,,,*4F\ 
    n$GPGSV,4,4,16,29,,,,28,,,,27,,,,26,,,*7E\n 
    $GPGGA,150427.8,4001.022852,N,10505.269674,W,1,06,1.4,1559.6,M,-21.0,M,,*53\n 
    $PQXFI,150427.8,4001.022852,N,10505.269674,W,1559.6,35.12,25.46,2.05*4A\n 
    $GPVTG,nan,T,nan,M,0.0,N,0.0,K,A*23\n 
    $GPRMC,150427.8,A,4001.022852,N,10505.269674,W,0.0,,280611,,,A*50"; 

我想從上面用C語言串大串獲得

"$GPGGA,150427.8,4001.022852,N,10505.269674,W,1,06,1.4,1559.6,M,-21.0,M,,*53\n" 

請幫助我。

+3

嘗試['strstr()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strstr.html)。 – pmg

+0

你所有的字符串是以這種方式格式化的嗎,你可以只是索引到字符串中,或​​者你是用不同的行數處理不同長度的字符串?正如@Chris Lutz所問,你有什麼嘗試,你卡在哪裏?我會補充說,是否有更多的字符串是這樣的,你想要一些符合特定格式的東西?我們需要更多信息。添加更多信息,我將刪除我對問題的滿意度。 – pstrjds

回答

2

你說這行,你想要的,但你並沒有說爲什麼。如果你說這條線是什麼使它成爲你所追求的路線,那麼我可以評論你如何找到它。

但基本上,你可能會想字符串分隔成線。您可以使用strtok()打破\n。然後,您可以一次一個地檢查線條。

1

strstr()命令,標準C庫的一部分,可用於找到一個串內的子串。

0

下面是一個高度優化的NMEA解析器最初是爲微控制器:https://code.google.com/p/avr-nmea-gps-library/

的GPS NMEA數據在nmea.cpp和nmea.h處理,容易定製/添加到項目的類似乎封裝你需要的一切。

這裏有趣的是,這段代碼是爲微控制器寫的,用很少的內存和處理能力,使這個代碼,如果還需要性能非常快的替代品。