#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;
}
Input
$GPRMC,123519,A,4807.038,N,01131.000,E
Expected Output
Time: 12:35:19 Latitude: 4807.038 N Longitude: 01131.000 E