【问题标题】:Parsing nmea csv in c++/c for microchip在 c++/c 中为微芯片解析 nmea csv
【发布时间】:2018-02-28 04:53:38
【问题描述】:

如何解析逗号分隔的字符字符串?我试过使用 strtok 但我无法让它工作。

     char str2[] = "$GNRMC,011802.00,A,4104.22420,N,08131.66173,W,0.021,,280218,,,D*78\n";


     char *p;

     p = strtok(str2, ",");




       char *input[8];
        int i = 0;
for( i=0;i<8;i++)
   {
    input[i] = p;
    p = strtok(NULL, ",");  

   }

理想情况下,我希望能够为字符串设置一个变量。比如

if (i == 0){
string type = $GNRMC;
}

if (i == 1){
float thisnum = 011802.00
}

等等

这是为图片而写的,所以我不能使用矢量。

【问题讨论】:

    标签: c csv pic microchip nmea


    【解决方案1】:

    除了两个小问题之外,你是上层的 sn-p 正在为我工​​作:

    • buf 应该是 str2
    • 您的 char 指针数组太小,无法容纳所有子字符串

    对于第二个,您需要先将子字符串转换为正确的类型。

    __

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h> 
    
    int main(){
    
    #define NUM_SUBSTRINGS 13
    
    char str2[] = "$GNRMC,011802.00,A,4104.22420,N,08131.66173,W,0.021,,280218,,,D*78\n";
    char *p;
    p = strtok(str2, ",");
    
    char * input[NUM_SUBSTRINGS];
    int i = 0;
    
    for(i=0; i<NUM_SUBSTRINGS; i++)
    {   
        char *type = NULL;
        float thisnum = 0.0;
        if (i == 0){
            type = p;
        }
    
        if (i == 1){
            thisnum = strtof(p, NULL);
        }
    
        if(p != NULL)
            printf("String %s, type: %s, num: %f\n", p, type, thisnum);
    
        input[i] = p;
        p = strtok(NULL, ",");  
    
    }
    return 0;
    }
    

    【讨论】:

    • 您是在 MPLAB X 模拟器中执行此操作吗?
    • 没关系。我的编译器正在优化变量,但没有在监视屏幕上给我正确的值。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2012-11-10
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多