하루 CRT 함수 strpbrk

어느덧 2 월말 이 되 어 지난주 에 사직 수속 을 마 쳤 다.그러나 화가 난 것 은 직장 에서 이틀 밖 에 남지 않 았 는데 프로젝트 팀장 이 나 에 게 임 무 를 주 다 니!자, 그냥 거절 할 게!더욱 놀 라 운 것 은 그 가 나 에 게 이 임 무 는 그들 이 하기 싫 고 할 수 없 는 까다 로 운 문제 라 고 말 해 주 었 다 는 것 이다. 내 가 그들 을 도와 해결 하 겠 다!!욕 했 어, 관리 할 줄 알 아!
쓸데없는 소리 하지 말고 strpbrk 좀 봐.
1. 소개
char*strpbrk( const char *string, const char *strCharSet );
용도: 원본 문자열 (string) 에서 가장 먼저 검색 문자열 (strCharSet) 을 포함 하 는 모든 문자 의 위 치 를 찾 아 되 돌려 줍 니 다. 찾 지 못 하면 빈 지침 을 되 돌려 줍 니 다.
2. 실현
/***
char *strpbrk(string, control) - scans string for a character from control

Purpose:
Finds the first occurence in string of any character from
the control string.

Entry:
char *string - string to search in
char *control - string containing characters to search for

Exit:
returns a pointer to the first character from control found
in string.
returns NULL if string and control have no characters in common.

***/
inline tChar *tStrPbrk(tChar *pStr, tChar *pStrSet)
{
// map 32 , 256 bit , map 2 [32][8]
unsigned char map[32] = {0};

// ASCII ( c) 8bit, 2 , 3 j( c & 7 ), 5 i( c >> 3 )
// map[i][j] 1
while(*pStrSet)
{
map[*pStrSet >> 3] |= (1 << (*pStrSet & 7));
pStrSet++;
}


while(*pStr)
{
//
if( map[*pStr >> 3] & (1 << (*pStr & 7)) )
return pStr++;

pStr++;
}

// NULL
return NULL;
}

tStrPbrk 는 tStrcspn 의 알고리즘 과 마찬가지 로 전 자 는 같은 문자 의 포인터 위 치 를 되 돌려 주 고 후 자 는 같은 문자 의 개 수 를 되 돌려 줍 니 다.
 
2. 테스트
tChar string[] = _T("The 3 men and 2 boys ate 5 pigs/n");
tChar strFind[] = _T("0123456789");
tChar *result = NULL;

// Return pointer to first digit in "string".
result = CY_CRT::tStrPbrk( string, strFind );
wcout << result++ << endl;

result = CY_CRT::tStrPbrk( result, strFind );
wcout << result++ << endl;
result = CY_CRT::tStrPbrk( result, strFind );
wcout << result << endl;

 
3. 분석
예 를 들 어 문자 '1' 에 대해 ASCII 코드 맛 0x 31, 오른쪽 이동 3 위 는 6, 7 과 연산 은 1, 즉 map [6] 에서 첫 번 째 입 니 다.
하나의 unsigned char 는 8 자리 로 높 은 5 자리 와 낮은 3 자리 입 니 다. 앞의 5 자리 범 위 는 0 ~ 32 이기 때문에 32 크기 의 배열 map 를 신청 합 니 다. 앞의 5 자 리 를 배열 로 표시 하고, 뒤의 3 자리 범 위 는 0 ~ 7 로 표시 합 니 다. 바로 모든 char (8bit) 입 니 다. 이 알고리즘 은 시간 과 공간 을 결합 하여 효율 이 매우 높 습 니 다.
 
4. 후기
STL 에서 제공 하 는 알고리즘 에서 find first of 는 두 개의 교체 기 구간 에서 처음으로 같은 값 의 위 치 를 찾 는 함수 입 니 다. 이 시리즈 가 완 료 된 후에 저 는 STL 알고리즘 을 CRT 가 제공 하 는 기능 함수 와 가로로 비교 할 것 입 니 다.

좋은 웹페이지 즐겨찾기