하루 CRT 함수 strpbrk
쓸데없는 소리 하지 말고 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 가 제공 하 는 기능 함수 와 가로로 비교 할 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.