Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    // Your logic here
    char len = 0;
    char numOfComma = 0;
    unsigned char numTimeH = 0;
    unsigned char numTimeM = 0;
    unsigned char numTimeS = 0;
    char hour[3];
    char min[3];
    char sec[3];
    char myposlat[100];
    char myposlong[100];
    char latP;
    char longP;
    unsigned char indxLat = 0, indxLong = 0;

    while(*(nmea + len) != '\0')
    {
        if(*(nmea + len) == ',')
        {
            numOfComma += 1;
        }
        else if (numOfComma > 0)
        {
            if(numOfComma == 1)
            {
                if (numTimeH < 2)
                {
                    hour[numTimeH++] = *(nmea + len);

                }
                else if (numTimeM < 2)
                {
                   min[numTimeM++] = *(nmea + len);
                }
                else
                {
                    sec[numTimeS++] = *(nmea + len);
                }
            }
            else if(numOfComma == 2)
            {
                // do noting
            }
            else if (numOfComma == 3)
            {
                myposlat[indxLat++] = *(nmea + len);
            }
            else if(numOfComma == 4)
            {
                latP = *(nmea + len);
            }
            else if (numOfComma == 5)
            {
                myposlong[indxLong++] = *(nmea + len);
            }
            else if (numOfComma == 6)
            {
                longP = *(nmea + len);
            }
        }
        else
        {
            // do noting
        }
        len += 1;
    }

     myposlat[indxLat] = '\0';
     myposlong[indxLong] = '\0';

     hour[numTimeH] = '\0';
     min[numTimeM] = '\0';
     sec[numTimeS] = '\0';


    printf("Time: %s:%s:%s\n", hour, min, sec);
    printf("Latitude: %s %c\n", myposlat, latP);
    printf("Longitude: %s %c \n", myposlong, longP);
}

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