#include <stdio.h>
#include <string.h>
void parse_gprmc(char *nmea) {
char time[20] = {0};
char lat[20] = {0};
char ns[2] = {0};
char lon[20] = {0};
char ew[2] = {0};
int i = 0, j = 0;
int field = 0;
while (nmea[i] != ',' && nmea[i] != '\0') i++;
if (nmea[i] == ',') i++;
while (nmea[i] != '\0' && field < 6) {
if (nmea[i] == ',') {
if (field == 0) time[j] = '\0';
else if (field == 2) lat[j] = '\0';
else if (field == 3) ns[j] = '\0';
else if (field == 4) lon[j] = '\0';
else if (field == 5) ew[j] = '\0';
field++;
j = 0;
i++;
continue;
}
if (field == 0) {
if (j == 2 || j == 5) {
time[j] = ':';
j++;
}
time[j] = nmea[i];
j++;
}
else if (field == 2 && j < 19) {
lat[j++] = nmea[i];
}
else if (field == 3 && j < 1) {
ns[j++] = nmea[i];
}
else if (field == 4 && j < 19) {
lon[j++] = nmea[i];
}
else if (field == 5 && j < 1) {
ew[j++] = nmea[i];
}
i++;
}
if (field == 0) time[j] = '\0';
else if (field == 2) lat[j] = '\0';
else if (field == 3) ns[j] = '\0';
else if (field == 4) lon[j] = '\0';
else if (field == 5) ew[j] = '\0';
printf("Time: %s\n", time);
printf("Latitude: %s %s\n", lat, ns);
printf("Longitude: %s %s\n", lon, ew);
}
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