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


 

 

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

指定位置から指定サイズだけ削除文字列:void my_strdel(char *str, int ix, int sz)

void my_strdel(char *str, int ix, int sz)
{
    if( sz <= 0 || ix < 0 ) {        // sz が0以下、または ix < 0 の場合は何もせずリターン
        return;
    }
    int len = strlen(str);
    if( ix >= len ) {        // ix が文字列長以上の場合も何もせずリターン
        return;
    }
    if( ix + sz >= len ) {    // 文字列の末尾まで削除する場合
        str[ix] = '\0';
    } else {
        char *dst = str + ix;        // コピー先アドレス
        const char *src = str + ix + sz;   // コピー元アドレス
        while( (*dst++ = *src++) != '\0' ) {   // 文字列を前に移動
        }
    }
}

解説:

  • 削除文字数が0以下だったり、削除範囲が不正の場合は、何もせず単にリターンします。
  • 文字列の末尾まで(または末尾を超えて)削除する場合は、削除位置にヌル文字を書き込みます。
  • 文字列の途中を削除する場合は、削除する箇所の先の文字列を削除位置に上書きコピーします。
  •  


    前: | 次: