#include <stdio.h>
#include <string.h>
void parse_gprmc(const char *nmea) {
int field = 0;
int start = 0;
int len = strlen(nmea);
for (int i = 0; i <= len; i++) {
if (nmea[i] == ',' || nmea[i] == '\0') {
int end = i;
int flen = end - start;
if (flen > 0) {
char buf[32];
if (flen >= sizeof(buf)) flen = sizeof(buf) - 1;
strncpy(buf, nmea + start, flen);
buf[flen] = '\0';
switch (field) {
case 1: // UTC time
if (strlen(buf) >= 6) {
printf("Time: %c%c:%c%c:%c%c\n",
buf[0], buf[1],
buf[2], buf[3],
buf[4], buf[5]);
}
break;
case 3: // Latitude
printf("Latitude: %s", buf);
break;
case 4: // N/S
printf(" %s\n", buf);
break;
case 5: // Longitude
printf("Longitude: %s", buf);
break;
case 6: // E/W
printf(" %s\n", buf);
break;
}
}
start = i + 1;
field++;
}
}
}
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