2012-05-14 2 views
0

저는 Zigbee를 사용하여 Keil C51에 글을 쓰고 있습니다.C에서 배열을 필터링하는 방법?

Serial_txString0("AT+UCAST:000D6F0000BB769D=StartGreen");   
tx_port0(0x0D); 

예를 들어, 나는 "+ 우 카스트 AT : 000D6f0000BB769D = StartGreen"받을 것이다, 나는 단지 얻을 "StartGreen"해당를 필터링 할. 하나의 예에서

char *eq = strrchr(str, '='); 
if (eq) 
    printf("%s\n", eq + 1); 

답변

4

. 이런 식으로 충분합니까 (= 뒤에 문자열의 일부분을 추출합니까)?

char* filter(char* input) { 
    int i = 0; 
    while (input[i] && input[i] != '=') i++; 

    return &input[i + 1]; 
} 

문자열을 복사하지 않으며 오른쪽 부분 만 참조합니다. 실제로 <string.h>strcpy를 사용하여 ...

void filter(char* input, char* output) { 
    int i = 0; 
    while (input[i] && input[i] != '=') i++; 

    strcpy(output, &input[i + 1]); 
} 

... 필터링 된 부분을 추출합니다.

+0

나는 초보자입니다. 전체적으로 무엇을합니까? – JiaYuan

+0

@JiaYuan 가장 오른쪽의'='에 대한 포인터를 찾아서 인쇄합니다. – cnicutar

+0

@cnicutar @JiaYuan 가장 오른쪽의'='에 대한 포인터를 찾고, 한 단계 씩 ('S'까지) 증가시킨 다음 인쇄합니다. –

0

, 내가 정말 필터링 할 무엇을 기반으로 말할 수 없습니다 대해 어떻게

+0

'while (input [i]! = '=') i ++;'문자열에 '='문자가 포함된다고 가정합니다. 그렇지 않으면 널 종료 (null termination)를 넘어서 반복하고 ASCII 코드 '='에 해당하는 바이너리 끈을 찾기 위해 전체 컴퓨터의 메모리를 검사합니다. 대신 strchr()을 사용하거나 null 종료를 확인하는 코드를 작성하십시오. – Lundin

+0

@ Lundin 예, 나는 그것을 깨달았습니다. 그러나 나는 그가'='이있을 것으로 기대한다고 가정했습니다. 그러나 좋아, 나는 그것을 적절하게 바꿨다. – Imp

+0

... 그래서 지금 추가해야합니다.'='가 문자열에 없으면 빈 문자열을 반환합니다. 의미 상으로는 정확합니다. – Imp

관련 문제