Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    // Your logic here
    const char GPS_S[] = "$GPRMC";
    const char dlmtr[] = ",";
    char* token = strtok(nmea, dlmtr);
    if (strcmp(token, GPS_S)==0){
        // parse next tokens:
        //parse time
        token = strtok(nmea+7, dlmtr);
        // format and print time
        printf("Time: %c%c:%c%c:%c%c\n", nmea[7], nmea[8]
                                       , nmea[9], nmea[10]
                                       , nmea[11], nmea[12]);                                       
        // format and print  Latittude
        printf("Latitude: %c%c%c%c.%c%c%c %c\n", nmea[16], nmea[17]
                                               , nmea[18], nmea[19]
                                               , nmea[21], nmea[22]
                                               , nmea[23], nmea[25]);  
        // format and print  Longitude
        printf("Longitude: %c%c%c%c%c.%c%c%c %c\n", nmea[27], nmea[28]
                                               , nmea[29], nmea[30]
                                               , nmea[31], nmea[33]
                                               , nmea[34], nmea[35]
                                               , nmea[37]);  
    }
    else{
        // not a valid gps format string
        printf("ERROR: Invalid string format - not starting with $GPRMC,");
    }



}

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