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


    前: | 次: