2016-01-20 157 views
0

我试图做一个程序解析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); 
+1

*但是如果我调试就崩溃了*你能解释一下吗? – NathanOliver

+0

您是否尝试过调试您的代码?逐行使用一个调试器来查看它实际上是否符合您的期望,并且所有变量都按照您的期望设置? –

+1

看起来您正在尝试将文本“$ GPRMC”转换为整数。我在该字符串中看不到任何小数位数。 –

回答

0
Kind=stod(kind); 

看起来不正确。 kind的值将是"$GPRMC"。您无法从中提取double

PS修复它可能不修复你可能拥有的任何其他问题。

1

在回顾,让我们考虑如何解析第一个数据。

com_1=gps.find(","); 

上面的代码找到了第一个逗号的位置,很好。

接下来,提取第一项的子:

kind=gps.substr(0,com_1); 

变量kind应该是 “$ GPRMC”,根据您的输入。

最后,你这个文本转换为双:因为有字符串中没有数字

Kind=stod(kind); 
// In other words, this is equivalent to 
// Kind = stod("$GPRMC"); 

stod功能失效。

顺便说一句,不同的变量名称,如kindKind,被认为是不良的编码做法。大多数编码准则禁止这种情况,并要求变量名称的区别大于大小写。