我有一个反转数组的功能,我认为有一些相同的问题。请引导我走正确的道路,以便整理出来。
功能:
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);
答案 0 :(得分: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;
}
}
答案 1 :(得分: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;
}
}
答案 2 :(得分:2)
中的两个问题
int a, b, arrtemp[arrlen];
b=arrlen;
for (a=0; a<=arrlen; a++)
{
arr[a] = arrtemp[b];
b--;
}
arrtemp[arrlen]
超出范围,有效索引为0到arrlen - 1
,arrtemp
复制到原始arr
。答案 3 :(得分:1)
有效索引为0到arrlen - 1
,因此:
for(a = 0; i <= arrlen; a++)
有一个off-by-one错误。您需要<
。
另请注意,使用具有动态长度的数组在C中是一个非常“新”的东西,它应该没问题,但需要C99编译器。与通过单个临时交换元素的O(1)(存储)方法相比,这样做没有任何好处。
答案 4 :(得分: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]);
}
}
答案 5 :(得分: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]));
}