2011-02-17 18 views
8

匹配字符串文本我對如何匹配文本的一些問題與Arduino的。如何在Arduino的

我:

String tmp = +CLIP: "+37011111111",145,"",,"",0 

,我試圖匹配:

if (tmp.startsWith("+CLIP:")) { 
    mySerial.println("ATH0"); 
} 

但是這是不工作的,我不知道爲什麼。

我試過substring,但結果是一樣的。我不知道如何使用它或什麼也沒有發生。

錯誤在哪裏?

+4

如何在第一線,甚至編譯(我試過在Arduiono /線路)的字符串?什麼是CLIP?你可以發佈工作/可編譯的代碼(例如mySerial的聲明)嗎? – 2011-02-18 15:32:44

+0

彼得在這個例子中是行不通的。我只是把這個例子,我從Arduino串行監視器得到。我用**子串**解決了我的問題,讓任何人都知道,串口監視器中的Arduino不會顯示\ r和\ n,那是我最大的問題。 – Min2liz 2011-02-21 07:08:37

回答

7
bool Contains(String s, String search) { 
    int max = s.length() - search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i) == search) return true; // or i 
    } 

    return false; //or -1 
} 

否則,你可以簡單地做:

if (readString.indexOf("+CLIP:") >=0) 

我還建議您訪問:

https://www.arduino.cc/en/Reference/String

2

我修改從gotnull代碼。感謝他讓我走上了賽場。

我只是限制搜索字符串,否則子字符串函數並不總是返回正確的答案(當substrign沒有結束字符串時)。因爲子字符串總是搜索到字符串的末尾。

int StringContains(String s, String search) { 
    int max = s.length() - search.length(); 
    int lgsearch = search.length(); 

    for (int i = 0; i <= max; i++) { 
     if (s.substring(i, i + lgsearch) == search) return i; 
    } 

return -1; 
} 
2
//+CLIP: "43660417XXXX",145,"",0,"",0 
if (strstr(command.c_str(), "+CLIP:")) { //Someone is calling 
    GSM.print(F("ATA\n\r")); 
    Number = command.substring(command.indexOf('"') + 1); 
    Number = Number.substring(0, Number.indexOf('"')); 
    //Serial.println(Number); 
} //End of if +CLIP: 

這是我正在做。希望能幫助到你。

2
if (tmp.startsWith(String("+CLIP:"))) { 
    mySerial.println("ATH0"); 
} 

你不能把引號只需要轉換的變量:)