All submissions

Parse GPS String for Time and Coordinates

Code

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

#define STR "$GPRMC,123519,A,4807.038,N,01131.000,E"

#define LEN sizeof(STR)+1
#define TAG_LEN    7
#define TIME_LEN   6
#define RESRVD     3
#define LATITUDE   8
#define COMMA1     1
#define DIRECTIN1  1
#define COMMA2     1
#define LONGITUDE  9
#define COMMA3     1
#define DIRECTIN2  1

#define TIME_S      (TAG_LEN)
#define TIME_E      (TIME_S+TIME_LEN)
#define LATITUDE_S  (TIME_E+RESRVD)
#define LATITUDE_E  (LATITUDE_S+LATITUDE)
#define DIRECTIN1_S (LATITUDE_E+COMMA1)
#define LONGITUDE_S (DIRECTIN1_S+COMMA2+1)
#define LONGITUDE_E (LONGITUDE_S+LONGITUDE)
#define DIRECTIN2_S (LONGITUDE_E+COMMA3)

bool grmc_prsnt(char *str){
    char *cmp = "$GPRMC";
    int i = 0;
    while(cmp[i]){
        if(cmp[i] != str[i]){
            return false;
        }
        i++;
    }
    return true;
}

void print_time(char *str){
    printf("Time: %c%c:%c%c:%c%c\n",str[0],str[1],str[2],str[3],str[4],str[5]);
}
void print_lat(char *str,int len,char dir){
   // printf("Latitude: ")
    for(int i = 0;i<len;i++){
        printf("%c",str[i]);
    }
    printf(" %c\n",dir);
}

void parse_gprmc(char *nmea) {
    // Your logic here
    if(grmc_prsnt(nmea) == true){
        print_time(&nmea[TIME_S]);
        printf("Latitude: ");
        print_lat(&nmea[LATITUDE_S],LATITUDE,nmea[DIRECTIN1_S]);
        printf("Longitude: ");
        print_lat(&nmea[LONGITUDE_S],LONGITUDE,nmea[DIRECTIN2_S]);
    }
}

int main() {
    char nmea[100];
    fgets(nmea, sizeof(nmea), stdin);
    parse_gprmc(nmea);
    return 0;
}

Solving Approach

 

 

 

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