102. Parse GPS String for Time and Coordinates

Back To All Submissions
Previous Submission
Next Submission

Code

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

void parse_gprmc(char *nmea) {
    int i = 0;

    int field = 0;
    int lengths[7];
    int starts[7];

    starts[field] = 0;
    while(nmea[i] != '\0' && field < 7) {
        if (nmea[i] == ',') 
        {
            lengths[field] = i - starts[field];
            field++;
            starts[field] = i + 1;
        }
        i++;
    }

    lengths[field] = i - starts[field];

    char * time  = &nmea[starts[1]];
    char * lat   = &nmea[starts[3]];
    char * ns    = &nmea[starts[4]];
    char * lon   = &nmea[starts[5]];
    char * ew    = &nmea[starts[6]];

    printf("Time: %.2s:%.2s:%.2s\n", time, time + 2, time + 4); //.2s --> Print 2 characters starting from address s
    printf("Latitude: %.*s %.*s\n", lengths[3], lat, lengths[4], ns); // .*s --> Print a specified amount of chars starting from s
    printf("Longitude: %.*s %.*s\n", lengths[5], lon, lengths[6], ew);
}

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

Solving Approach

 

 

 

Was this helpful?
Upvote
Downvote