Robofun 機器人論壇

標題: 自訂Split函式無法正常運作 [打印本頁]

作者: pizg    時間: 2013-4-21 23:23
標題: 自訂Split函式無法正常運作
本帖最後由 pizg 於 2013-4-28 00:14 編輯

以下是我要自訂的Split函式, 我希望把
"- This, a sample string."
解析成String Array
s[0] = "This"
s[1] = "a"
s[2] = "sample"
s[3] = "string"
但它無法正常運作,
請問各位先進該如何修正?

  1. int count_delimiters(char str[], const char* delimiters) {
  2.   int i, j, result = 0;
  3.   for (i = 0; i < strlen(str); ++i) {
  4.     for (j = 0; j < strlen(delimiters); ++j) {
  5.       if (str[i] == delimiters[j]) {
  6.         ++result;
  7.       }
  8.     }
  9.   }
  10.   return (result + 1);
  11. }

  12. char** mySplit(char str[], const char* delimiters) {
  13.   int result_size = count_delimiters(str, delimiters);
  14.   int i = 0;
  15.   char* result[result_size];
  16.   char* pch = strtok(str, delimiters);

  17.   while (pch != NULL) {
  18.     result[i] = pch;
  19.     pch = strtok(NULL, delimiters);
  20.     ++i;
  21.   }

  22.   return result;
  23. }

  24. void setup() {     Serial.begin(9600);     char str[] = "- This, a sample string.";     char **s;     s = mySplit(str, " ,.-");     for(int k=0; k < sizeof(s); k++) {          Serial.println(s[k]);    }}
  25. void loop(){}
複製代碼

作者: vegewell    時間: 2013-4-23 15:20
回復 1# pizg


   char* pch = strtok(str, delimiters);

  while (pch != NULL) {
    result = pch;
    pch = strtok(NULL, delimiters);


改為
char* pch = strtok(str, ",");


  while (pch != NULL) {
    result = pch;
    pch = strtok(NULL, ",");
==========================================
char str[] = "- This, a sample string.";  
   char **s;  
   s = mySplit(str, " ,.-");  
改為
char str[] = "-This a sample string,.";  
   char **s;  
   s = mySplit(str, ",");
作者: pizg    時間: 2013-4-24 00:44
本帖最後由 pizg 於 2013-4-24 12:47 編輯

感謝您的回覆.
不過您的建議似乎不可行.
作者: vegewell    時間: 2013-4-24 13:58
回復 3# pizg


   你抄襲別人的程式抄一半當然不能如你意
原程式是為了與另一字做比較
要達成你要的
你自己要從新寫
作者: pizg    時間: 2013-4-24 18:01
本帖最後由 pizg 於 2013-4-24 18:15 編輯
回復  pizg


   你抄襲別人的程式抄一半當然不能如你意
原程式是為了與另一字做比較
要達成你要的
...
vegewell 發表於 2013-4-24 13:58

它的確是網路上截錄下來的程式,
我說"自訂",原意是"自訂函式",因為Arduino沒提供split這樣的函式,所以只能"自訂",
沒說這是我的"自創程式".
作者: pizg    時間: 2013-4-28 00:23
本帖最後由 pizg 於 2013-4-28 00:33 編輯

這是我修改後的程式,
不過仍然有錯,
請各位大大幫幫忙!
  1. int myChrCount(char *str, const char *de) {
  2.   int i, j, result = 0;
  3.   for (i = 0; i < strlen(str); ++i) {
  4.     for (j = 0; j < strlen(de); ++j) {
  5.       if (str[i] == de[j]) {
  6.         ++result;
  7.       }
  8.     }
  9.   }
  10.   return result;
  11. }

  12. String *mySplit(String s, const char *de) {
  13.   char str[s.length()+1];
  14.   s.toCharArray(str, s.length()+1);  
  15.   int i = myChrCount(str, de);
  16.   String s1[i+1];

  17.   int j = 0;
  18.   char *pch;
  19.   pch = strtok (str, de);
  20.   while (pch != NULL) {
  21.     s1[j] = String(pch);
  22.     Serial.println(s1[j]);  //DEBUG PRINT
  23.     j++;
  24.     pch = strtok (NULL, de);
  25.   }
  26.   return s1;
  27. }

  28. void setup() {
  29.   Serial.begin(9600);
  30.   String sz = "- This, a sample string.";
  31.   String *s2 = mySplit(sz, " ,.-");
  32.   for(int j=0;j<4;j++){
  33.     Serial.println(s2[j]);
  34.   }
  35. }

  36. void loop(){}
複製代碼

作者: vegewell    時間: 2013-4-29 20:19
本帖最後由 vegewell 於 2013-4-29 20:25 編輯

回復 6# pizg


   String s1[i+1];改為
String s1[i-3];
=============================
void setup() {
  Serial.begin(9600);
  String sz = "- This, a sample string.";
  String *s2 = mySplit(sz, " ,.-");
  for(int j=0;j<4;j++){
    Serial.println(s2[j]);
  }
}
改為
void setup() {
  Serial.begin(9600);
  String sz = "- This, a sample string.";
  String *s2 = mySplit(sz, " ,.-");
  }===================
打開後要等一下
作者: pizg    時間: 2013-4-29 23:13
回復  pizg

   String s1;改為
String s1;
=============================
void setup() {
  Ser ...
vegewell 發表於 2013-4-29 20:19

感謝您的回覆.
不過您的建議仍舊不可行.




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2