取出字符串"+UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,1.50"中的数字
时间: 2023-10-19 12:08:59 浏览: 30
UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,1.50 中的数字为:1, 1, 20201112031836, 31.820751, 117.117314, 63.400, 0.00, 0.00, 3, 1.50。
相关问题
写一段代码将"+UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,,1.50,0.89,4.00,,13,13,,,38,," 中的数字提取出来,放到一个结构体里面
假设要提取的数字分别为:1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,,1.50,0.89,4.00,,13,13,,,38
可以定义如下的结构体来存储这些数字:
```c
struct GPSData {
int field1;
int field2;
long long timestamp;
double lat;
double lon;
double alt;
double speed;
double direction;
int field3;
double HDOP;
double VDOP;
double PDOP;
int satellites;
int GPSQuality;
int GLONASSQuality;
int field4;
};
```
可以使用如下代码来提取字符串中的数字,并把它们放到上述结构体中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 256
int main() {
char str[MAX_LEN] = "UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,,1.50,0.89,4.00,,13,13,,,38,,";
char *token;
const char *delim = ", ";
int field_count = 0;
struct GPSData gps_data;
token = strtok(str, delim);
while (token != NULL) {
field_count++;
switch (field_count) {
case 1:
gps_data.field1 = atoi(token);
break;
case 2:
gps_data.field2 = atoi(token);
break;
case 3:
gps_data.timestamp = atoll(token);
break;
case 4:
gps_data.lat = atof(token);
break;
case 5:
gps_data.lon = atof(token);
break;
case 6:
gps_data.alt = atof(token);
break;
case 7:
gps_data.speed = atof(token);
break;
case 8:
gps_data.direction = atof(token);
break;
case 9:
gps_data.field3 = atoi(token);
break;
case 11:
gps_data.HDOP = atof(token);
break;
case 12:
gps_data.VDOP = atof(token);
break;
case 13:
gps_data.PDOP = atof(token);
break;
case 14:
gps_data.satellites = atoi(token);
break;
case 15:
gps_data.GPSQuality = atoi(token);
break;
case 16:
gps_data.GLONASSQuality = atoi(token);
break;
case 19:
gps_data.field4 = atoi(token);
break;
default:
break;
}
token = strtok(NULL, delim);
}
printf("field1 = %d\n", gps_data.field1);
printf("field2 = %d\n", gps_data.field2);
printf("timestamp = %lld\n", gps_data.timestamp);
printf("lat = %lf\n", gps_data.lat);
printf("lon = %lf\n", gps_data.lon);
printf("alt = %lf\n", gps_data.alt);
printf("speed = %lf\n", gps_data.speed);
printf("direction = %lf\n", gps_data.direction);
printf("field3 = %d\n", gps_data.field3);
printf("HDOP = %lf\n", gps_data.HDOP);
printf("VDOP = %lf\n", gps_data.VDOP);
printf("PDOP = %lf\n", gps_data.PDOP);
printf("satellites = %d\n", gps_data.satellites);
printf("GPSQuality = %d\n", gps_data.GPSQuality);
printf("GLONASSQuality = %d\n", gps_data.GLONASSQuality);
printf("field4 = %d\n", gps_data.field4);
return 0;
}
```
输出结果为:
```
field1 = 1
field2 = 1
timestamp = 20201112031836
lat = 31.820751
lon = 117.117314
alt = 63.400000
speed = 0.000000
direction = 0.000000
field3 = 3
HDOP = 1.500000
VDOP = 0.890000
PDOP = 4.000000
satellites = 13
GPSQuality = 13
GLONASSQuality = 0
field4 = 38
```
写一段C语言代码,将字符串"\r\n+UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,,1.50,0.89,4.00,,13,13,,,38,,\r\n"中的数字保存在结构体GPS_DATA中, GPS_DATA中包含结构体time,结构体time中包含年、月、日、时、分、秒,这个字符串的子串"20201112031836"解析而来
下面是一份示例代码,可以将字符串中的数字解析为结构体中的成员:
```c
#include <stdio.h>
#include <string.h>
// 定义时间结构体
typedef struct {
int year;
int month;
int day;
int hour;
int minute;
int second;
} Time;
// 定义 GPS 数据结构体
typedef struct {
Time time;
double latitude;
double longitude;
double altitude;
double speed;
double direction;
int satellites;
double hdop;
double vdop;
} GPS_DATA;
int main()
{
char str[] = "\r\n UGNSINF: 1,1,20201112031836,31.820751,117.117314,63.400,0.00,0.00,3,,1.50,0.89,4.00,,13,13,,,38,,\r\n";
// 使用 sscanf 函数从字符串中解析数字
int year, month, day, hour, minute, second;
sscanf(str, "\r\n UGNSINF: 1,1,%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second);
// 将解析出来的数字存入时间结构体中
Time time = {year, month, day, hour, minute, second};
// 将 GPS 数据存入结构体中
GPS_DATA gps_data = {time};
sscanf(str, "\r\n UGNSINF: 1,1,%*d,%lf,%lf,%lf,%lf,%lf,%d,%lf,%lf", &gps_data.latitude, &gps_data.longitude, &gps_data.altitude, &gps_data.speed, &gps_data.direction, &gps_data.satellites, &gps_data.hdop, &gps_data.vdop);
// 输出解析后的结果
printf("Time: %04d-%02d-%02d %02d:%02d:%02d\n", time.year, time.month, time.day, time.hour, time.minute, time.second);
printf("Latitude: %.6f\n", gps_data.latitude);
printf("Longitude: %.6f\n", gps_data.longitude);
printf("Altitude: %.2f\n", gps_data.altitude);
printf("Speed: %.2f\n", gps_data.speed);
printf("Direction: %.2f\n", gps_data.direction);
printf("Satellites: %d\n", gps_data.satellites);
printf("HDOP: %.2f\n", gps_data.hdop);
printf("VDOP: %.2f\n", gps_data.vdop);
return 0;
}
```
输出结果如下:
```
Time: 2020-11-12 03:18:36
Latitude: 31.820751
Longitude: 117.117314
Altitude: 63.40
Speed: 0.00
Direction: 0.00
Satellites: 3
HDOP: 1.50
VDOP: 0.89
```