用递归反转数组

时间:2019-04-17 15:25:43

标签: c xcode

当我尝试运行此命令时,它要求我输入11个数字而不是10个,这确实很奇怪,然后输出结果像一个更奇怪的结果,请帮忙。

void function(int array[],int length,int start)
{
    if (length<start)
    {
        return;
    }
    int temp=array[start];
    array[start]=array[length];
    array[length]=temp;
    function(array,length-1,start+1);
}

int main()
{
    int array[10],num=0,num2=10;
    printf("enter the array:\n");
    for (int i =0; i<num2; i++)
    {
        scanf("%d\n",&array[i]);
    }
    function(array,num2,num);
    for (int t = 0; t<num2; t++)
    {
        printf("%d\n",array[t]);
    }
}

然后这是数组1,2 ... 10,11的输出

enter the array:
1
2
3
4
5
6
7
8
9
10
11

return
214696143
10
9
8
7
6
5
4
3
2
(lldb) 

请帮助

2 个答案:

答案 0 :(得分:0)

尝试一下:

#include <stdio.h>

void function(int array[],int start, int end)
{
    if (start < end)
    {
      int temp;
      temp = array[start];
      array[start] = array[end];
      array[end] = temp;
      function(array, start+1, end-1);
    }
}

int main()
{
    int array[10],num=0,num2=10;
    printf("enter the array:\n");
    for (int i =0; i<num2; i++)
    {
        scanf("%d",&array[i]);
    }
    function(array,num,num2 - 1);
    for (int t = 0; t<num2; t++)
    {
        printf("%d\n",array[t]);
    }
}

请注意,在C中,数组从0开始。最后一个索引是9而不是10。您需要使用length - 1而不是length来访问最后一个元素

答案 1 :(得分:0)

大小为10的数组的最后一个索引实际上是9。所以这一行:

import re



with open("file", 'r') as f:
    text=f.read()

for word in text.split(" "):
    if len(word)==2:
        x=int(input("DO you want to change second letter? (YES=1/N0=0):"))
        if x==1:
            lista2=re.sub('([A-Z][A-Z]+ )',lambda q: q.group(1).lower(),text)

    else:
        lista1 = re.sub('([A-Z][A-Z][a-z]+)', lambda q: q.group(1).lower(), text)

应该是:

function(array,num2,num);

此外,您对function(array,num2-1,num); 的使用不正确。消除scanf字符。在此处阅读有关\n的更多信息:http://www.cplusplus.com/reference/cstdio/scanf/

我已更正您的代码并在此处进行了测试:https://onlinegdb.com/B1Yy4yBqN