Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    char time[10],lat[10],lon[10];
    int t=0,l=0,lo=0,field=0,i=0;
    char ns,ew;
    while(nmea[i]!='\0'&& nmea[i]!='\n'){
       if(nmea[i]==','){
        field++;
        i++;
        continue;
       }
       if(field==1){
        time[t++]=nmea[i];
       }
       if(field==3){
        lat[l++]=nmea[i];
       }
       if(field==4){
        ns=nmea[i];
       }
       if(field==5){
        lon[lo++]=nmea[i];
       }
       if(field==6){
        ew=nmea[i];
       }
       i++;

    }
    time[t]='\0';
    lat[l]='\0';
    lon[lo]='\0';
    printf("Time: %c%c:%c%c:%c%c\n",time[0],time[1],time[2],time[3],time[4],time[5]);
    printf("Latitude: %s %c\n",lat,ns);
    printf("Longitude: %s %c",lon,ew);
    return;
}

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