文字列の八方向検索
Posted feedbacks - C
全角じゃないです。
#4624 を参考にして総当たりかつ上方向への検索としてみました。
#4624 を参考にして総当たりかつ上方向への検索としてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *lines[] = { "CBAACA",
"ABCABC",
"BCCBCA",
"CCBBAB",
NULL };
char *strrev( char *str ){
char *h, *t, tmp;
if( !str ) return NULL;
h = t = str;
while( *t++ ); t-=2;
while( h < t ){
tmp = *h;
*h++ = *t;
*t-- = tmp;
}
return str;
}
int search8way( char *target, char **lines ){
char *buf, *revstr;
int i,j,m,n;
int len = strlen(target);
buf = (char *)malloc( sizeof(char) * strlen(target) + 1 );
revstr = (char *)malloc( sizeof(char) * strlen(target) + 1 );
if( !target || !revstr ){
free(target);
free(revstr);
return EXIT_FAILURE;
}
memset( buf, '\0', len );
strrev( strncpy(revstr, target, len) );
for( i = 0; lines[i]; i++ ){
for( j = 0; lines[i][j]; j++ ){
!strncmp( &lines[i][j], target, len ) && printf("(%d, %d), right\n", j, i);
!strncmp( &lines[i][j], revstr, len ) && printf("(%d, %d), left\n", j+len-1, i);
if( i < len - 1 ) continue;
for( m = n = 0; m < len; m++, n++ ) buf[n] = lines[i-m][j];
!strncmp( buf, target, len ) && printf("(%d, %d), up\n", j, i);
!strncmp( buf, revstr, len ) && printf("(%d, %d), down\n", j, i-len+1);
for( m = n = 0; m < len; m++, n++ ) buf[n] = lines[i-m][j+m];
!strncmp( buf, target, len ) && printf("(%d, %d), right up\n", j, i);
!strncmp( buf, revstr, len ) && printf("(%d, %d), left down\n", j+len-1, i-len+1);
if( j < len - 1 ) continue;
for( m = n = 0; m < len; m++, n++ ) buf[n] = lines[i-m][j-m];
!strncmp( buf, target, len ) && printf("(%d, %d), left up\n", j, i);
!strncmp( buf, revstr, len ) && printf("(%d, %d), right down\n", j+len-1, i-len+1);
}
}
free(target);
free(revstr);
return EXIT_SUCCESS;
}
int main( void ){
return search8way("ABC", lines);
}
|


kuromin #4400() Rating0/2=0.00
[ reply ]