Comment detail

文字変換表に基く文字列の変換 (Nested Flatten)
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;
    
}

Index

Feed

Other

Link

Pathtraq

loading...