我试图做一个程序解析GPS值($ GPRMC)。C++字符串加倍
首先成功地解析从全行的字符串。
$GPRMC,062513.000,A,3645.9487,N,12716.8382,E,1.76,295.08,160116,,,A*6E
之后我做了它,我使用函数stod()
为字符串是双。
但它崩溃,如果我调试。
代码在这里。
#include<iostream>
#include<string>
using namespace std;
//"$GPRMC,062513.000,A,3645.9487,N,12716.8382,E,1.76,295.08,160116,,,A*6E";
int main()
{
string gps="$GPRMC,062516.000,A,3645.9494,N,12716.8365,E,1.82,302.69,160116,,,A*63";
int com_1;
int com_2;
int com_3;
int com_4;
int com_5;
int com_6;
int com_7;
int com_8;
int com_9;
string kind;
string time;
string state;
string latitude;
string n_s;
string longitude;
string e_w;
string knot;
string degree;
double Kind;
double Time;
double Latitude;
double Longitude;
double Knot;
double Degree;
com_1=gps.find(",");
com_2=gps.find(",",com_1+1);
com_3=gps.find(",",com_2+1);
com_4=gps.find(",",com_3+1);
com_5=gps.find(",",com_4+1);
com_6=gps.find(",",com_5+1);
com_7=gps.find(",",com_6+1);
com_8=gps.find(",",com_7+1);
com_9=gps.find(",",com_8+1);
kind=gps.substr(0,com_1);
time=gps.substr(com_1+1,com_2-com_1-1);
//state=gps.substr(com_2+1,com_3-com_2-1);
latitude=gps.substr(com_3+1,com_4-com_3-1);
//n_s=gps.substr(com_4+1,com_5-com_4-1);
longitude=gps.substr(com_5+1,com_6-com_5-1);
//e_w=gps.substr(com_6+1,com_7-com_6-1);
knot=gps.substr(com_7+1,com_8-com_7-1);
degree=gps.substr(com_8+1,com_9-com_8-1);
Kind=stod(kind);
Time=stod(time);
//State=stod(state);
Latitude=stod(latitude);
//N_s=stod(n_s);
Longitude=stod(longitude);
//E_w=stod(e_w);
Knot=stod(knot);
Degree=stod(degree);
*但是如果我调试就崩溃了*你能解释一下吗? – NathanOliver
您是否尝试过调试您的代码?逐行使用一个调试器来查看它实际上是否符合您的期望,并且所有变量都按照您的期望设置? –
看起来您正在尝试将文本“$ GPRMC”转换为整数。我在该字符串中看不到任何小数位数。 –