문자열 파싱 질문입니다.

idrukawa의 이미지

c/c++ 에서 다음 문자열에서

ABCDE_FGHI_Ver1.2.34.bin

각 각 다음을 추출하고 싶은데요.
ABCDE
FGHI
1.2.34

ABCDE와 FGHI는 strtok(pOriStr, "_") 을 써서 추출했는데...
1.2.34를 추출하기가 까다로워서 질문드립니다.

1.2.34를 추출하는 효과적인 방법좀 알려주세요

wariua의 이미지

한 글자씩 isdigit() || ... 하는 방법도 있겠고... 좀 더 깔끔하게 구현하자면 strpbrk()와 strspn() 정도면 되지 않을까요?

$PWD `date`

snowall의 이미지

항상 Ver 다음에 오나요?

피할 수 있을때 즐겨라! http://melotopia.net/b

idrukawa의 이미지

네 Ver1.2.3 일수도 있고
Ver1.4.55 일수도 있고

마지막 숫자 자릿수는 변경되도 형식은 위와 같습니다.

snowall의 이미지

Ver과 가장 마지막에 등장하는 .을 기준으로 그 사이를 읽어오면 될 것 같은데요

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

char *w[5];
int n = sscanf("ABCDE_FGHI_Ver1.2.34.bin", "%a[^_]_%a[^_]_Ver%a[0-9].%a[0-9].%a[0-9]", &w[0], &w[1], &w[2], &w[3], &w[4]);

가 제일 간단할 것 같은데요.