Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    // Your logic here
    char *str;
    str = nmea;
    int len;
    for(len=0;str[len]!='\0';len++);
    //printf("%d",len);

    int i=7;
    int date=0;
    while(str[i] != ','){
        date++;
        i++;
    }
    //printf("\n %d",date);

    int j=7;
    char d[date+2];
    for(i=0;i<date+2;i++){
        if(i==2 || i== 5) {
            d[i]=':';
            j--;
            
        }
        else d[i] = str[j];
        j++;
    }

    d[i]='\0';
    i=16;
    int lat=0;
    while(str[i]!=','){
        lat++;
        i++;
    }

    j=16;
    char l[lat+2];
    for(i=0;i<lat;i++){
        l[i] = str[j];
        j++;
    }
   
    l[i] = ' ';

    i++;
    l[i] = str[25]; 

    j = 27;
    i=27;
    int lon=0;
    while(str[i] != ','){
        lon++;
        i++;
    }
    
    char longti[lon+2];
    for(i=0;i<lon;i++){
        longti[i] = str[j];
        j++;
    }
    longti[i] = ' ';
    i++;
    longti[i] = str[len-1];
    i++;
    longti[i] = '\0';

    //print
    printf("Time: %s\n",d);
    printf("Latitude: %s\n",l);
    printf("Longitude: %s\n",longti);


    
}

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