Comment detail

文字列の反転(括弧の対応を保存) (Nested Flatten)
初投稿です。Cで書いてみました。日本語は未対応です。
 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
char *reverse_string2( char *str, int length ){
   char *now = str;
   int len = length;
   int i=0;
   char **sp, *p;
   sp = (char **) malloc( length * sizeof( char * ));

   if( !sp || !now ){
      return NULL;
   }

   for(; *str && len--; now++ ){
      if( *now == '(' ) sp[i++] = now;
      else if( *now == '{' ) sp[i++] = now;
      else if( *now == '[' ) sp[i++] = now;
      else if( ( *now == ')' && i && *sp[i-1] == '(' && i-- )
            || ( *now == '}' && i && *sp[i-1] == '{' && i-- )
            || ( *now == ']' && i && *sp[i-1] == '[' && i-- ))
      {
         (p = strchr("()",*sp[i])) || (p = strchr("{}",*sp[i])) || (p = strchr("[]",*sp[i]));
         *sp[i] = *(p+1);
         (p = strchr(")(",*now)) || (p = strchr("}{",*now)) || (p = strchr("][",*now));
         *now = *(p+1);
      }
   }
   free( sp );
   return reverse_string( str, length );
}
for ループの中を改良しました。
1
2
3
4
5
6
   for(; *str && len--; now++ ){
      if( *now == '(' || *now== '{' || *now == '[' ) sp[i++] = now;
      else if( ( *now == ')' && i && *sp[i-1] == '(' && (*sp[--i] = ')') && (*now = '(') )
            || ( *now == '}' && i && *sp[i-1] == '{' && (*sp[--i] = '}') && (*now = '{') )
            || ( *now == ']' && i && *sp[i-1] == '[' && (*sp[--i] = ']') && (*now = '[') ) ){}
   }

Index

Feed

Other

Link

Pathtraq

loading...