如何匹配Arduino中的字符串中的文本

时间:2011-02-17 13:33:53

标签: arduino

我对Arduino有一些关于如何匹配文本的问题。

我有:

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

我正在努力匹配:

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

但这不起作用,我不明白为什么。

我尝试substring,但结果是一样的。我不知道如何使用它或没有任何反应。

错误在哪里?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我修改了来自gotnull的代码。感谢他把我带到了赛道上。

我只是限制了搜索字符串,否则子字符串函数并不总是返回正确答案(当子字符串未结束字符串时)。因为子字符串搜索总是在字符串的末尾。

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 :(得分: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:

这就是我这样做的方式。希望它有所帮助。

答案 3 :(得分:2)

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

只有在需要转换变量时才能使用带引号的字符串:)