#include <iostream>
#include<string>
#include<vector>// A::member 表示A成员中的member
// namespace my_vary202234610229 namespace是c++的关键字,将变量定义在自己创建的my_vary命名空间
// 访问命名空间中的变量需要作用域分解符
// 命名空间只能被定义在全局,其中定义的变量为全局变量
// 要随心所欲的使用命名空间内的变量,就要释放命名空间
using namespace std;// 表示释放std命名空间中的变量名,函数名,类型名,std是c++的标准库命名空间void parse_gps_data(const string& gps_str, double &lat, double &lon, double &speed) {vector<string> fields;//承接分割字符size_t start =0, end;//分割以‘,’为间隔字符串://npos表示string的结束位,是string::type_size 类型的,也就是find()返回的类型。find函数在找不到指定值得情况下会返回string::nposwhile ((end=gps_str.find(',', start)) != string::npos) {//end表示字符串中的逗号的位置//substr复制指定字符串,参数(开始位置,截至位置)//fields.push_back(x) 在fields尾部添加一个值xfields.push_back(gps_str.substr(start, end - start));start = end + 1;}if(fields.size()>=8 && fields[0] == "$GPRMC" && fields[2]=="A"){//stod 将字符串转为双精度浮点数lat=stod(fields[3]);if (fields[4]=="S") lat=-lat;lon=stod(fields[5]);if(fields[6]=="W") lon=-lon;speed=stod(fields[7]);cout << "Latitude:" << lat << " ""Longitude:" << lon << " ""Speed:" << speed << endl;}else cout << "Invalid GPS data:" << gps_str <<endl;}int main(){//GPRMC,标志位,UTC时间(hhmmss.sss时分秒毫秒),判断定位是否有效位(A有效,V无效),纬度(ddmm.mmmm度分)//南北纬标志位(N北纬,S南纬),经度(ddmm.mmmm度分),东西经标志位(E东经,W西经),地面速率(单位:节)//地面航向(000.0-359.9度),UTC日期(ddmmyy年月日),磁偏角(000.0-180.0度),磁偏角方向(E东,W西)//模式指示()string gps_str="$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,AS*50";double lat=0, lon=0, speed=0;parse_gps_data(gps_str, lat, lon, speed);return 0;
}