ViVi Home > 技術文書 > ポインタ入門 > 基礎演習問題> strins


 

 

C/C++ ポインタ入門 > 文字列関数 > strins
Nobuhide Tsuda
Nov-2013

文字列を先頭に挿入:void my_strins(char *dst, const char *src)

void my_strins(char *dst, const char *src)
{
    int dlen = strlen(dst);      // dst 文字例長
    int slen = strlen(src);      // src 文字例長
    char *d = dst + dlen + slen;       // dst に入って文字をコピーする先の最後のアドレス
    char *s = dst + dlen;                  // dst に入ってる文字の最後のアドレス
    for(int i = 0; i < dlen + 1; ++i) {
        *d-- = *s--;                //  dst 文字列を末尾から順にコピー
    }
    for(int i = 0; i < slen; ++i) {
        *dst++ = *src++;     // 空けた領域に src 文字列を順にコピーする
    }
}

解説:

void my_strins(char *dst, const char *src)
{
    int dlen = strlen(dst);      // dst 文字例長
    int slen = strlen(src);      // src 文字例長
    for(int i = dlen + 1; --i >= 0;) {
        dst[i+slen] = dst[i];    // dst を src の文字数分だけ後ろにずらす
    }
    for(int i = 0; i < slen; ++i) {
        dst[i] = src[i];     // 空けた領域に src 文字列を順にコピーする
    }
}

解説:

 


前: | 次: