簡體   English   中英

反轉數組

[英]Reverse an array

我有一個反轉數組的功能,我認為有一些問題。 請引導我走正確的道路,以解決此問題。

功能:

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);

您正在arrtemp初始化的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;
    }
}
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;
    }
}

在兩個問題

    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

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

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

出現一對一錯誤。 您需要<

另請注意,使用動態長度這樣的數組在C中是很“新”的事情,應該沒問題,但需要C99編譯器。 與僅通過單個臨時項交換元素的O(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]);
        }
    }

在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]));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM