0

配列があり、特定の範囲のインデックスから要素を削除したいとします。

配列のサイズ、配列内のすべての要素のサイズ、および削除するインデックスの範囲が事前にわかっている場合、新しい配列へのコピーを回避する方法はありますか?

4

2 に答える 2

1

コピーに新しい配列を使用したくない場合は、同じ配列自体でこれを行うことを考えることができます。ここに私が持っているものがあります:

#include<stdio.h>
#include<string.h>
int main()
{
  char str[] = "hello world";
  int i , strt , end , j;

  setbuf ( stdout , NULL );

  printf ("enter the start and end points of the range of the array to remove:\n");
  scanf ("%d%d", &strt , &end);
  int len = strlen (str);
  for ( i = end; i >= strt ;i--)
    {
      str[i-1] = str[i];
      for ( j = i+1; j <= len ; j++)
        {
        str[j-1] = str[j];
        }
      len--;
    }

  printf ("%s" , str);
  return 0;
}

このコードは文字配列用ですが、整数配列用のアルゴリズムを少し変更して使用することもできます (演習として実行してください)。

注:- ただし、複雑さが指数関数的に増加することがわかるため、この方法はあまり効率的ではありません。そのため、新しい配列をコピーする方法を使用することをお勧めします。

于 2013-07-15T05:11:59.923 に答える
1

こんにちは、あなたはそのようなことをすることができます。

int main(int ac, char **av)
{
    char  *str;
    int   i;

    i = 0;
    str = strdup("Hello World");
    while(str[i])
    {
        if(i == 6) // 6 = W the range of the array you want to remove
        str[i] = '\0';
        i++;
    }
    printf("%s\n", str);
}

出力は「Hello World」ではなく「Hello」になります。

于 2013-07-15T01:24:36.317 に答える