는 한 번에 여러 문자 중 어느 하나를 선두를 찾기 위해 strpbrk
기능을 사용하여 위치에 하나를 찾고 있어요 . 이스케이프 문자를 건너 뛰어서는 안됩니다. 당신은 당신이 정말로 찾고있는 캐릭터가 뒤따라 지는지 확인해야합니다.
e.e. 우리가 "
을 찾고 싶다면 \"
으로 탈출 할 수 있다고 가정합니다. 실제로 이것은 "
또는 \
중 하나를 찾아야 함을 의미합니다.
char *ptr = strpbrk(string, "\"\\"); /* look for chars in the set { ", \ } */
하지만 우리는 탈출 따옴표에 관심이없는 및 계속해야하기 때문에 우리는 루프에서이 작업을 수행해야한다 :
char *quote = 0;
char *string = str; /* initially points to the str array */
while (*string != 0) {
char *ptr = strpbrk(string, "\"\\");
다음으로 우리는 우리가 뭔가를 발견 여부를 확인 즉 :
:
if (!ptr)
break;
우리가 뭔가가 발견하는 경우 반드시 \
또는 "
입니다
if (*ptr == '"') {
quote = ptr;
break;
}
견적이 아닌 경우 이스케이프 여야합니다. 우리는 다음 문자로 증가합니다. 종료 null의 경우는, 캐릭터 라인의 마지막에 백 슬레시가있는 것을 의미합니다. 이것은 부적당 한 탈출입니다.
if (*++ptr == 0)
break;
그렇지 않으면, 우리가 다음 문자를 건너 뛰고 다음 이스케이프 또는 이스케이프 견적을 스캔 루프를 계속할 수 있습니다. while 루프 실행 후 그것을
string = ++ptr;
}
이스케이프 견적이 발생하면
다음
quote
포인트. 그렇지 않으면
quote
은 null로 유지됩니다.
이 코드는 \"
이외의 다른 이스케이프가 있다고 가정하지만 길이는 모두 한 문자입니다 (예 : \b
또는 \r
. \xff
과 같은 더 이상 이스케이프가 있으면 작동하지 않습니다. 탈출은 언어의 관습을 구성합니다. 올바르게 처리하기 위해 처리중인 언어가 무엇인지 알아야합니다.
출처
2012-04-15 05:38:34
Kaz
언제나 숙제 일 수는 없지만 'strchr'을 사용해야한다고 명시되어 있습니까? – Kaz
@ 카즈 : 감사합니다! 아니, 그냥 strchr이 큰 문자열로 더 잘 수행 할 것이라고 생각했습니다. – Kayla