文字列中の単語の置換を行う。I Love Alice.のアリスをBombにする。Bombは、ボム君の事


x 過去ログを見よ!!
x 特定のプログラムの内部で使うので完璧性を求めていない
(特定の条件では、アクセス範囲の例外を起こして例外処理でコアダンプする)


目的
M5NanoC6の接点情報の表示を増やす為に
「HTML」内のAAAやBBBを数値に置き換えて
バックでCGIを動かして、端末(PC)側で正しく表示させる。
標準ライブラリより出来れば速度重視ため、独自開発

開発方針
1.軽量
2.高速化
3.みやすさ重視

仕様

x 出来れば複数子(置き換え)を同時にしたい

1.検索対象(アリス)の文字列の長さを求める
(アリスは、定数だから長さは、求まるが、カウンターを回す)
2.線形サーチで検索しながらコピーする
3.見つかったら検索対象数分(アリス分だけ)だけカウンターを戻して記録
4.置き換え対象(ポム)のコピー
5.残りをコピー(ぴりおーど?)

カウンターについて、考える
---------------------------

●サーチアンドコピー(イメージ　実際とは、異なります)


![o_coq622.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ec07c63d-29fb-eae0-4fea-bc805a6a1568.jpeg)

●カウンターを戻す(イメージ　実際とは、異なります)

![o_coq623.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/99950ad8-603a-3553-7048-2c1da64fdd21.jpeg)

●ボムのコピー(イメージ　実際とは、異なります)

![o_coq624.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/549a0786-f78f-85c4-9b86-f4c8f43ee280.jpeg)

●のこり全部(イメージ　実際とは、異なります)

![o_coq625.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a9a7d9e1-4e90-c0cf-3ad7-e50a366f0182.jpeg)


オンラインコンパイラ

```c++


#include <iostream>
using namespace std;
int main(void){
    // Your code here!

    char *s = "Alice";  //サーチ
    char *c = "Bomb";  //チェンジ
    char *a = "I Love Alice."; //全体
    char b[16] = {0};  //一時領域

    char v,w; //文字の一時

    printf("before\n");
    printf("[%s]\n",a);
    printf("(%s)\n",b);

    int k = 0;
    while(s[k++]){/*空文*/}

    int j = 0;
    while(1){
        
        int i = 0;
        while(1){
            v = s[i];
            w = a[i+j];
            if(v == 0 || w == 0){
                break;
            }else if(v != w){
                break; 
            }//endif
            i++;
        }//while i

        if(v == 0) {
            break; //true
        } else if( w == 0){
            break; //false
        }//endif
        
        b[j] = a[j];
        j++;
    }//while j
    k = (k-1) + j;

    b[j] = 0;

    if( v == 0 ) {

        int i = 0;
        while( (b[j] = c[i]) ){j++;i++;}

        while( (b[j] = a[k]) ){j++;k++;}

    }//endif

    printf("after\n");
    printf("[%s]\n",a);
    printf("(%s)\n",b);

}//main



```



```

before
[I Love Alice.]
()
after
[I Love Alice.]
(I Love Bomb.)


```

----------------------


おまけ- デバッグ途中
------------------------

```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!

    char *s = "Alice";  //サーチ
    char *c = "Bomb";  //チェンジ
    char *a = "I Love Alice."; //全体
    char b[16] = {0};  //一時領域

    char v,w; //文字の一時
    
    //kkkkkkkkkkkkkkkkkkkkkkkkk
    
    printf("%s\n",s);
    
    int k = 0;
    while(s[k++]){/*空文*/}
    printf("%i\n",(k-1));
    
    //kkkkkkkkkkkkkkkkkkkkkkkkk
    
    int j = 0;
    while(1){
        
        int i = 0;
        while(1){
            v = s[i];
            w = a[i+j];
            if(v == 0 || w == 0){
                break;
            }else if(v != w){
                break; 
            }//endif
            i++;
        }//while i

        if(v == 0) {
            printf("true\n");break;
        } else if( w == 0){
            printf("false\n");break;
        }//endif
        
        b[j] = a[j];
        j++;
    }//while j
    k = (k-1) + j;
    printf("j = %d\n",j);
    printf("k = %d\n",k);

    b[j] = 0;
    printf("[%s]\n",a);
    printf("(%s)\n",b);

    printf("-[%d]\n",v);
    printf("-(%d)\n",w);

    
    if( v == 0 ) {
        printf("####\n");
        
        int i = 0;
        while( (b[j] = c[i]) ){j++;i++;}



        printf("before\n");
        printf("[%s]\n",c);
        printf("(%s)\n",b);
        
        printf("j = %d\n",j);
        printf("k = %d\n",k);
        
        //gggggggggggggggggggggggggg
        printf("gggggggggggggggggggggggggg\n");
        
        while( (b[j] = a[k]) ){j++;k++;}

        printf("jkjkjk\n");
        printf("[%s]\n",a);
        printf("(%s)\n",b);
        
        
        //gggggggggggggggggggggggggg
    }

    printf("after\n");
    printf("[%s]\n",a);
    printf("(%s)\n",b);


}//main


```

```

Alice
5
true
j = 7
k = 12
[I Love Alice.]
(I Love )
-[0]
-(46)
####
before
[Bomb]
(I Love Bomb)
j = 11
k = 12
gggggggggggggggggggggggggg
jkjkjk
[I Love Alice.]
(I Love Bomb.)
after
[I Love Alice.]
(I Love Bomb.)

```