[ トップ | 一覧 | 編集 | 差分 | 単語検索 | 最終更新 | ]
シンプルすぎていじる余地がほとんどないYO! 仕方ないから常套的に比較回数減らしてみた。
/* 半角カナ・SJIS 2バイト文字のいずれでもない文字のなかから * spに一致する文字を探す */ char *findSplitter(char *stt,int sp) { unsigned char *p = (unsigned char*)stt; int c;
sp &= 0xff;
while(c = *p++) { if ( c >= 0x81 /* && c <= 0xfc */ ) { if ( c < 0xa0 || c > 0xdf ) p++; continue; } if ( c == ss ) return p - 1; } return NULL ; }
read11.rev1.c からの変更としました。 最近の処理系は、int = 32bit だよね?
const char s_PrintTbl[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x00 - 0x0f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x10 - 0x1f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x20 - 0x2f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x30 - 0x3f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x40 - 0x4f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x50 - 0x5f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x60 - 0x6f */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x70 - 0x7f */ 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0x80 - 0x8f */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0x90 - 0x9f */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xa0 - 0xaf */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xb0 - 0xbf */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xc0 - 0xcf */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xd0 - 0xdf */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0xe0 - 0xef */ 2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0, /* 0xf0 - 0xff */ };
char *findSplitter( char *stt, int sp ) { unsigned char *p = (unsigned char *)stt; char ss = (unsigned char)( sp & 0x000000ff );
while( *p ){ if( s_PrintTbl[*p] ){ p += s_PrintTbl[*p]; continue; } if( *p == ss ) return p;
p++; } return NULL; }
YukiWiki 1.6.2 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by aki.