Parse GPS String for Time and Coordinates

Code

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

// void parse_gprmc(char *nmea) {
//     // Your logic here
//     char time[9];
//     char lat[20];
//     char lat_dir;
//     char lon[20];
//     char lon_dir;

//     int index = 0;

//     while(nmea[index] != ',')
//     {
//         index++;
//     }
//     index++;

//     int i=0;
//     while(nmea[index] != ',')
//     {
//         time[i++] = nmea[index++];
//         if(i == 2)
//         {
//             i++;
//         }
//         if(i==5)
//         {
//             i++;
//         }
//     }
//     time[i] = '\0';
//     time[2] = ':';
//     time[5] = ':';

//     // printf("%s\n", time);

//     index++;
//     while(nmea[index] != ',')
//     {
//         index++;
//     }

//     index++;
//     i=0;
//     while(nmea[index] != ',')
//     {
//         lat[i++] = nmea[index++];
//     }
//     lat[i] = '\0';
//     // printf("%s\n", time);

//     // printf("%s\n", lat);


//     index++;
//     while(nmea[index] != ',')
//     {
//         lat_dir = nmea[index++];
//     }

//     // printf("%c\n", lat_dir);

//     index++;
//     i=0;
//     while(nmea[index] != ',')
//     {
//         lon[i++] = nmea[index++];
//     }
//     lon[i] = '\0';

//     // printf("%s\n", lon);

//     index++;
//     while(!((nmea[index] == ',') || (nmea[index] == '\0')))
//     {
//         lon_dir = nmea[index++];
//     }

//     // printf("%c\n", lon_dir);

//     printf("Time: %s\n", time);
//     printf("Latitude: %s %c\n", lat, lat_dir);
//     printf("Longitude: %s %c\n", lon, lon_dir);



// }



void parse_gprmc(char *nmea) {
    char *fields[7];
    int index = 0;

    char *token = strtok(nmea, ",");

    while((token != NULL) && (index<7))
    {
        fields[index++] = token;
        token = strtok(NULL, ",");
    }

    char *t = fields[1];
    printf("Time: %.2s:%.2s:%.2s\n", t, t+2, t+4);

        // Latitude
    printf("Latitude: %s %s\n", fields[3], fields[4]);

    // Longitude
    printf("Longitude: %s %s\n", fields[5], fields[6]);

    // for(int i=0; i<20; i++)
    // {
    //     printf("%c", nmea[i]);
    // }


}

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