- #include <stdio.h>
- #include <assert.h>
- int IsAInB(char A[], char B[]) /* for A-Z */
- {
- if( !A || !B) return 0;
- int bitB = 0, ret = 1, i=0;
- for( ; *B!='\\0'; ++B)
- bitB |= 1<<(*B-'A');
- for( int i=0; *(A+i)!='\\0'; ++i) {
- if( !( (1<<(*(A+i)-'A')) & bitB) ) {
- ret = -i;
- break;
- }
- }
- return ret;
- }
- int IsAInB1(char A[], char B[]) /* for ASCII */
- {
- if( !A || !B) return 0;
- int bitB[4] = {0}, ret = 1, i=0;
- for( ; *B!='\\0'; ++B)
- bitB[*B>>5] |= 1<<(*B&0x1F);
- for( int i=0; A[i]!='\\0'; ++i) {
- if( !( ( 1<<(A[i]&0x1F) ) & bitB[A[i]>>5]) ) {
- ret = -i;
- break;
- }
- }
- return ret;
- }
- void IsAInB_UT(void)
- {
- printf("%s", __FUNCTION__);
- typedef struct {
- char *bench, *tested;
- int ret;
- }TEST_CASE;
- TEST_CASE ts[] = {
- {"SAPORO", "OPASRO", 1},
- {"NOTKO", "NAPSO", -2},
- {"NOTKO", "NOTSO", -3},
- {"GCTTACGCGGGTA", "GCTGCTA", 1},
- {"NOVEMBER", "REMEMBER", 0},
- {"november", "remember", 0},
- {"a2f3d#", "a2f3d?owe", -5},
- {"a2f3d#", "a2f3d?owe$@", -5},
- {"a2z3d#", "a2f3d?owe$@", -2},
- };
- int nts = sizeof ts/ sizeof(ts[0]);
- for( int i=0; i<nts; ++i){
- assert( ts[i].ret == IsAInB1(ts[i].bench, ts[i].tested) );
- printf(".");
- }
- }
- int main(void)
- {
- IsAInB_UT();
- return 1;
- }
- //该片段来自于http://www.codesnippet.cn/detail/221020136579.html
来源: http://www.codesnippet.cn/detail/221020136579.html