Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    // Your logic here
    if (!nmea || nmea[0] == '\0') return;

    int comma_cnt = 0;
    //mảng để lưu data
    char tim[10] = {0};
    char lat[10] = {0}, ns[5] = {0};
    char lon[10] = {0}, ew[5] = {0};
    //idx cho từng mảng
    int t = 0, la = 0, n = 0, lo = 0, e = 0;

    char *ptr = nmea; //đảm bảo con trỏ nmea không bị xê dịch (dự phòng cho malloc)

    while (*ptr != '\0') {
        if (*ptr == ',')
            comma_cnt++;
        else { //ghi data đúng mảng tương ứng
            if (comma_cnt == 1) tim[t++]    =  *ptr;
            if (comma_cnt == 3) lat[la++]   =  *ptr;
            if (comma_cnt == 4) ns[n++]     =  *ptr;
            if (comma_cnt == 5) lon[lo++]   =  *ptr;
            if (comma_cnt == 6) ew[e++]     =  *ptr;
            else if (comma_cnt > 6) break;
        }
        ptr++;
    }
    printf("Time: %c%c:%c%c:%c%c\n", tim[0], tim[1], tim[2], tim[3], tim[4], tim[5]);
    printf("Latitude: %s %s\n", lat, ns);
    printf("Longitude: %s %s\n", lon, ew);
}

int main() {
    char nmea[100];
    fgets(nmea, sizeof(nmea), stdin);
    parse_gprmc(nmea);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

$GPRMC,123519,A,4807.038,N,01131.000,E

Expected Output

Time: 12:35:19 Latitude: 4807.038 N Longitude: 01131.000 E