Parse GPS String for Time and Coordinates

Code

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

void parse_time(const char* str, char* output = NULL) {
    output[0] = str[0];
    output[1] = str[1];
    output[2] = output[5] = ':';
    output[3] = str[2];
    output[4] = str[3];
    output[6] = str[4];
    output[7] = str[5];
    output[8] = '\0';
}

void parse_gprmc(char *nmea) {
    // Your logic here
    char* token = strtok(nmea, ",");
    int count = 0;
    char time[9];
    char lat[25];
    char lon[25];
    while(token != NULL) {
        if (count == 1) {
            parse_time(token, time); 
            // printf("->time: %s\n", time);
        } else if (count == 3) {
            strcpy(lat, token);
        } else if (count == 4) {
            int len = strlen(lat);
            lat[len] = ' ';
            lat[len+1] = token[0]; 
            lat[len+2] = '\0'; 
        } else if (count == 5) {
            strcpy(lon, token);
        } else if (count == 6) {
            int len = strlen(lon);
            lon[len] = ' ';
            lon[len+1] = token[0]; 
            lon[len+2] = '\0'; 
        }
        token = strtok(NULL, ",");
        count++;
    }

    printf("Time: %s\n", time);
    printf("Latitude: %s\n", lat);
    printf("Longitude: %s", lon);
}

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