2011-02-17 2 views
8

텍스트를 일치시키는 방법에 대해 Arduino와 관련된 몇 가지 문제가 있습니다.Arduino에서 문자열의 텍스트를 일치시키는 방법

나는이 :

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

그리고 일치하는 것을 시도하고있다 :

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

을하지만이 작동하지 않습니다, 나는 왜 아무 생각이 없습니다.

나는 substring을 시도했지만 결과는 같습니다. 나는 그것을 사용하는 방법을 모르거나 아무 일도 일어나지 않는다.

어디서 오류가 있습니까?

+4

방법 첫 번째 줄도 (내가 Arduiono/배선에 그것을 시도) 컴파일 않습니다 캐스팅 할 필요가 따옴표 문자열을 넣을 수없는 이유는 무엇입니까? CLIP이란 무엇입니까? 작업/컴파일 가능한 코드 (예 : mySerial 선언)를 게시 할 수 있습니까? –

+0

피터이 예제에서는 작동하지 않습니다. 나는 Arduino Serial 모니터에서 얻은 예를 들어 넣었다. ** 문제는 직렬 모니터의 Arduino가 \ r과 \ n을 표시하지 않는다는 사실을 다른 사람이 알 수 있도록 ** 하위 문자열 **로 해결했습니다. – Min2liz

+0

@ Min2liz 내 대답이 도움이된다면. 올바른 것으로 받아 들여 주시겠습니까? – fuzz

답변

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의 코드를 수정했습니다. 저를 트랙에 올려 주셔서 감사합니다.

나는 검색 문자열을 제한했다. 그렇지 않으면 substring 함수가 항상 올바른 답을 리턴하지 못했다 (substrign이 문자열을 끝내지 않았을 때). substring은 항상 문자열의 끝까지 검색하기 때문에.

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; 
} 
+0

오신 것을 환영합니다. 실제로 트릭을해야합니다. – fuzz

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"); 
} 

당신은 단지 당신이 변수 :

관련 문제