0

我有一个反转数组的函数,我认为同样存在一些问题。请引导我走正确的道路来解决这个问题。

功能:

void reversearr (int arr[], int arrlen)

    {
        int a, b, arrtemp[arrlen];
        b=arrlen;
        for (a=0; a<=arrlen; a++)
        {
            arr[a] = arrtemp[b];
            b--;
        }
        printf("\nthe reversed array is");

        for(b=0; b<arrlen; b++)
        {
            printf("%d",arrtemp[b]);
        }
    }

函数是这样调用的

reversearr(arr,max);
4

6 回答 6

3
void reversearr (int arr[], int arrlen)
{  
    int a, tmp;
    for (a = 0; a < arrlen / 2; ++a)
    {
         tmp = arr[a];
         arr[a] = arr[arrlen - a - 1];
         arr[arrlen - a - 1] = tmp;
    }
}
于 2012-10-09T13:56:33.047 回答
3

您正在复制arrtemp未初始化的内容。

我想你会想要类似的东西

void reversearr (int arr[], int arrlen)
{
    int a;
    for (a=0; a<arrlen/2; a++)
    {
        int tmp = arr[arrlen-1-a]
        arr[arrlen-1-a] = arr[a]
        arr[a] = tmp;
    }
}
于 2012-10-09T13:55:23.790 回答
2

中的两个问题

    int a, b, arrtemp[arrlen];
    b=arrlen;
    for (a=0; a<=arrlen; a++)
    {
        arr[a] = arrtemp[b];
        b--;
    }
  1. arrtemp[arrlen]超出范围,有效索引为 0 到arrlen - 1
  2. 您正在从未初始化的复制arrtemp到原始arr.
于 2012-10-09T13:56:08.220 回答
1

您使用了错误的数组来存储反向。试试下面的代码:

void reversearr (int arr[], int arrlen)

    {
        int a, b, arrtemp[arrlen];
        b=arrlen;
        for (a=0; a<=arrlen; a++)
        {
            arrtem[a] = arr[b];
            b--;
        }
        printf("\nthe reversed array is");

        for(b=0; b<arrlen; b++)
        {
            printf("%d",arrtemp[b]);
        }
    }
于 2012-10-09T13:56:57.890 回答
1

有效索引为 0 到arrlen - 1,因此:

for(a = 0; i <= arrlen; a++)

有一个错误。你需要<.

另请注意,使用具有动态长度的数组在 C 中是一个相当“新”的东西,它应该没问题,但需要 C99 编译器。与仅通过单个临时交换元素的 O(1)(存储中)方法相比,这样做没有任何好处。

于 2012-10-09T13:55:22.930 回答
0

在 JavaScript 中,如果有一个数组并且您必须反转每个元素的字符串:

var arr = ['woow is great budd','mu me lelo','wikindi'];

function reverseString(str){
    return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0);
}

for(i=0;i<arr.length;i++){
   console.log(reverseString(arr[i]));
}
于 2019-01-31T15:05:39.817 回答