Parse GPS String for Time and Coordinates

Code

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

void parse_gprmc(char *nmea) {
    // Your logic here
    int index =0,semi_num=0;
    char time[10],lati[50],longi[50],lat_n,long_e;
    while(*nmea!='\0')    
    {
        if(*nmea==',')
        {
            index =0;
            semi_num++;
        }
        else
        {
            // printf("*nmea=%c \n",*nmea);
            if(semi_num==1) // time
            {
                time[index]=*nmea;
                time[index+1]='\0';
                // printf("time[index]=%c ",time[index]);
            }
            else if(semi_num==3)
            {
                lati[index]=*nmea;
                lati[index+1]='\0';
                // printf("lati[index]=%c ",lati[index]);
            }
            else if(semi_num==4)
            {
                lat_n=*nmea;
                // printf("lat_n=%c ",lat_n);
            }
            else if(semi_num==5)
            {
                longi[index]=*nmea;
                longi[index+1]='\0';
                // printf("longi[index]=%c ",longi[index]);
            }
            else if(semi_num==6)
            {
                long_e=*nmea;
                // printf("long_e=%c ",long_e);
            }            
            index++;
        }        
        nmea++;
    }

    // //print data
    // printf("Time: ");
    // for(int i=0; i<10; i++)
    // {        
    //     if((time[i+1]=='\0')||(time[i+1]=='\n')) 
    //     {
    //         printf("%c\n",time[i]);
    //         break;
    //     }
    //     printf("%c",time[i]);
    //     if((i%2)!=0) printf(":");        
    // }
    // printf("Latitude: ");
    // for(int i=0; i<50; i++)
    // {
    //     printf("%c",lati[i]);
    //     if((lati[i]=='\0')||(lati[i]=='\n')) break;     
    // }
    // printf(" %c\n",lat_n);
    // printf("Longitude: ");
    // for(int i=0; i<50; i++)
    // {
    //     printf("%c",longi[i]);
    //     if((longi[i]=='\0')||(longi[i]=='\n')) break;     
    // }
    // printf(" %c\n",long_e);

        printf("Time: %c%c:%c%c:%c%c\n", time[0], time[1]
                                       , time[2], time[3]
                                       , time[4], time[5]);                                       
        // format and print  Latittude
        printf("Latitude: %c%c%c%c.%c%c%c %c\n", lati[0], lati[1]
                                               , lati[2], lati[3]
                                               , lati[5], lati[6]
                                               , lati[7], lat_n);  
        // format and print  Longitude
        printf("Longitude: %c%c%c%c%c.%c%c%c %c\n", longi[0], longi[1]
                                               , longi[2], longi[3]
                                               , longi[4], longi[6]
                                               , longi[7], longi[8]
                                               , long_e);    
}

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