• [Arduino] 逗号分隔文本到数组的两种方法


    以下是今日练习通过逗号来分割字符数组/字符串的2个例子和方法“

    1.通过indexOf函数

    /*
    *Splitsplit sketch
    *split a comma-separated string
    */
    
    String message = "Peter,Paul,Mary";
    int commaPosition;
    
    void setup(){
      Serial.begin(9600);
    }
    
    void loop(){
       Serial.println(message);
       do{
          commaPosition = message.indexOf(',');
          if(commaPosition != -1)
          {
             Serial.println(message.substring(0,commaPosition));
             message=message.substring(commaPosition+1,message.length()); 
           //  Serial.println(message);
          }
          else{
            if(message.length()>0){
               Serial.println(message);
            }
          }
       }
       while(commaPosition>=0);
      // if(message=="Mary")
      // while(1);
       delay(5000);
    }

     

    2.通过strtok_r函数

    /**
    *SplitSplit sketch
    *split a commaPosition string
    **/
    
    const int MAX_STRING_LEN = 20;
    char stringList[] = "Peter,Paul,Mary";
    char stringBuffer[MAX_STRING_LEN+1];
    
    void setup(){
      Serial.begin(9600);
    }
    
    void loop(){
      char *str;
      char *p;
      strncpy(stringBuffer,stringList,MAX_STRING_LEN);
      Serial.println(stringBuffer);
      for(str=strtok_r(stringBuffer,",",&p); //split using comma
         str;   //loop while str is not null
         str = strtok_r(NULL,",",&p) //get subsequent tokens
         ){
         Serial.println(str);
         if(strcmp(str,"Paul")==0)
            Serial.println("found Paul"); 
         }
    
         delay(5000);
    }
    
    /* strtok_r()
    str=strtok_r(stringBuffer,",",&p) //把stringBuffer按逗号拆分,
    //拆分后数值首地址付给指针p,数值赋值给指针str
    */
    
    提取逗号中数值:
    
    /*
    *SplitSplit sketch
    *Split a comma-separted string
    */
    const int MAX_STRING_LEN =20;
    char stringList[] = "H,10,1050,15000,/r/n";
    char stringBuffer[MAX_STRING_LEN + 1];
    void setup(){
      Serial.begin(9600);
    }
    
    void loop(){
      char *str;
      char *p;
      char index = 0;
      strncpy(stringBuffer,stringList,MAX_STRING_LEN);
      Serial.println(stringBuffer);
      for(str=strtok_r(stringBuffer,",",&p);
         str;
         str=strtok_r(NULL,",",&p)
         )
       {
         index ++;
         Serial.println(str);
         if(strcmp(str,"H")==0)
            Serial.println("found HEADER");
           
            Serial.println();
           
            if(strlen(str)==2){  //if not 2 digital,it is easy to error
              Serial.print("value1 = " );
              Serial.println(str);}
           
             if(index==3){
              Serial.print("value2 = " );
              Serial.println(str);} 
             
             if(index==4){
              Serial.print("value3 = " );
              Serial.println(str);}    
             
         }
       
        delay(50000);
    }

    --------------------------------------

    欢迎您,进入 我系程序猿 的cnBlog博客。

    你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

    You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

    --------------------------------------

    分享到QQ空间  

  • 相关阅读:
    【c语言趣味编程100例】爱因斯坦数学题
    【c语言趣味编程100例】求车速
    【c语言】sizeof和strlen函数区别
    Spiral Matrix I, II
    Trapping Rain Water
    Word Ladder**
    Minimum Size Subarray Sum
    Longest Substrings Without Repeating Characters
    Palindrome Linked List
    Container With Most Water
  • 原文地址:https://www.cnblogs.com/jqmtony/p/3763060.html
Copyright © 2020-2023  润新知