こう。 #5675(2008/02/04 01:17 GMT) [ C ] Rating1/1=1.00
3になるのかな? a-cとc-a、a-cとzxcなど、数さえ合えば対応します。 -も文字列の最後なら変換できます。 元のtrの詳しい仕様は知りませんが・・・
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 69 70 71 72 73 74 75 76 77 78
#include <stdio.h> #include <stdlib.h> void tr_sub(char* c,char*src,char*dest){ char from,to; while(*src){ if(*(src+1)=='-'&&*(src+2)!='\0'){ from=*src; to=*dest; do{ if(*c==from){ *c=to; return; } if(*src<*(src+2)) from++; else from--; if(*dest<*(dest+2)) to++; else to--; }while(from<=*(src+2)); src+=3; dest+=3; }else{ if(*c==*src){ *c=*dest; return; } src++; dest++; } } } int tr(char *str, char* src, char* dest){ char *p; int len_src; int len_dest; len_src=0; for(p=src;*p;p++){ if(*(p+1)=='-'&&*(p+2)!='\0'){ len_src+=abs(*(p+2)-*p)+1; p+=2; }else len_src++; } len_dest=0; for(p=dest;*p;p++){ if(*(p+1)=='-'&&*(p+2)!='\0'){ len_dest+=abs(*(p+2)-*p)+1; p+=2; }else len_dest++; } if(len_dest!=len_src) return -1; while(*str){ tr_sub(str++,src,dest); } return 0; } int main(){ char* text="typewriter"; tr(text,"qwertyuiop","QWERTYUIOP"); printf("%s\n",text); tr(text,"A-Z","a-z"); printf("%s\n",text); tr(text,"p-r","r-p"); printf("%s\n",text); tr(text,"p-r","rsp"); printf("%s\n",text); return 0; }
Rating1/1=1.00-0+
[ reply ]
こう。 #5675() [ C ] Rating1/1=1.00
Rating1/1=1.00-0+
[ reply ]