Разбор строки C - PullRequest
       6

Разбор строки C

0 голосов
/ 08 апреля 2011

Я совершенно незнаком с C. Входит разделенная запятыми строка, и мне нужно ее распутать. Некоторые биты соответствуют числовым значениям, другие - словам и т. Д.

Введите

char str_in;

str_in = "$GPRMC,114353.000,A,6016.3245,N,02458.3270,E,0.01,0,A*69";

выход

#include <string.h>
float lat, lon, time;

time = 114353.000;
lat = 60+(1/60)*16.3245; //Conversion to decimal degrees
lon = 024+(1/60)*58.3270;

Все расстояния остаются без изменений. Раздел, с которым я боролся, - это извлечение первых двух / трех цифр из широты / долготы и обработка их по-разному. Кто-нибудь может помочь?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Использует стрток. Вот ссылка:

http://www.metalshell.com/source_code/31/String_Tokenizer.html

/* strtok example by mind@metalshell.com
 *
 * This is an example on string tokenizing
 *
 * 02/19/2002
 *
 * http://www.metalshell.com
 *
 */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
        int x = 1;
        char str[]="this:is:a:test:of:string:tokenizing";
        char *str1;

        /* print what we have so far */
        printf("String: %s\n", str);

        /* extract first string from string sequence */
        str1 = strtok(str, ":");

        /* print first string after tokenized */
        printf("%i: %s\n", x, str1);

        /* loop until finishied */
        while (1)
        {
                /* extract string from string sequence */
                str1 = strtok(NULL, ":");

                /* check if there is nothing else to extract */
                if (str1 == NULL)
                {
                        printf("Tokenizing complete\n");
                        exit(0);
                }
                /* print string after tokenized */
                printf("%i: %s\n", x, str1);
                x++;
        }
        return 0;
}
1 голос
/ 08 апреля 2011

http://nmea.sourceforge.net/#features

Хорошо выглядит.

0 голосов
/ 08 апреля 2011

Я бы, наверное, сделал что-то вроде этого:

sscanf(str_in, %[^,],%f,%c,%f,%c,%f",
    command,
    &packed_time,
    &fix_status,
    &packed_lat,
    &NS,
    &packed_long);

struct lat_long { 
    int degrees;
    double minutes;
};

lat_long lat, long;
lat.degrees = packed_lat / 100;
lat.minutes = packed_lat - lat.degrees;

long.degrees = packed_long / 100;
long.minutes = packed_long - long.degrees;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...