Arrays C语言中的反向数组?

Arrays C语言中的反向数组?,arrays,string,Arrays,String,嗨,伙计们,我似乎不能反转我的数组,我的语法看起来不错,我的逻辑看起来不错,但FOR函数只是没有迭代。此函数用于反转数组,主要是字符串。n=字符串的长度 #include <stdio.h> #include <string.h> void reverse(char, int); int main() { char a[100]; gets(a); reverse(a, strlen(a)-1); printf("%s\n",a);

嗨,伙计们,我似乎不能反转我的数组,我的语法看起来不错,我的逻辑看起来不错,但FOR函数只是没有迭代。此函数用于反转数组,主要是字符串。n=字符串的长度

#include <stdio.h>
#include <string.h>

void reverse(char, int);

int main()
{
    char a[100];
    gets(a);

    reverse(a, strlen(a)-1);

    printf("%s\n",a);
    getchar();
    getchar();
    getchar();
    return 0;
}

void reverse(char ar[], int n)
{
    char c;
    int i = 0;
    printf("n = %d" , n);
    for ( i = 0; i >= n ; i++){
        c = ar[i];
        ar[i] = ar[n];
        ar[n] = c;
        printf("Processed");
        n--;}

}


/*
if (begin >= n)
return;

c          = *(x+begin);
*(x+begin) = *(x+n);
*(x+n)   = c;
offs = x++;
printf("Begin = %d   ,  n = %d, offs = %p  \n", begin, n, offs);
reverse(x, ++begin, --n); */
#包括
#包括
无效反向(字符,整数);
int main()
{
chara[100];
获得(a);
反面(a,斯特伦(a)-1);
printf(“%s\n”,a);
getchar();
getchar();
getchar();
返回0;
}
无效反向(字符ar[],整数n)
{
字符c;
int i=0;
printf(“n=%d”,n);
对于(i=0;i>=n;i++){
c=ar[i];
ar[i]=ar[n];
ar[n]=c;
printf(“已处理”);
n--;}
}
/*
如果(开始>=n)
返回;
c=*(x+begin);
*(x+begin)=*(x+n);
*(x+n)=c;
offs=x++;
printf(“开始=%d,n=%d,关闭=%p\n”,开始,n,关闭);
反向(x,++开始,--n)*/

循环变量的条件是错误的,它应该测试小于,而不是大于(因为您似乎想从0到
n


i>=n
应该是
i

循环变量的条件是错误的,它应该测试小于,而不是大于(因为您似乎想从0到
n


i>=n
应该是
i

以及@H2CO3已经指出的逻辑错误,您的函数原型是错误的-更改:

void reverse(char, int);
致:


请注意,如果您在编译时启用了警告(例如,
gcc-Wall…
),编译器将指出此类错误,从而为您节省大量时间和精力。

以及@H2CO3已经指出的逻辑错误,您的函数原型是错误的-更改:

void reverse(char, int);
致:

请注意,如果您在编译时启用了警告(例如,
gcc-Wall…
),编译器将指出此类错误,从而为您节省大量时间和精力。

这是O(N)性能。实际上,您只执行N/2次迭代

void reverseArray(char[] arr) {
        int start = 0, end = strlen(arr) - 1, tempVal;
        for (; start < end; start++, end--) {
            //swap start & end location
            tempVal = arr[end];
            arr[end] = arr[start];
            arr[start] = tempVal;
        }
    }
void reversearlay(char[]arr){
int start=0,end=strlen(arr)-1,tempVal;
对于(;开始<结束;开始++,结束--){
//交换起始和结束位置
tempVal=arr[end];
arr[end]=arr[start];
arr[start]=tempVal;
}
}
这是O(N)性能。实际上,您只执行N/2次迭代

void reverseArray(char[] arr) {
        int start = 0, end = strlen(arr) - 1, tempVal;
        for (; start < end; start++, end--) {
            //swap start & end location
            tempVal = arr[end];
            arr[end] = arr[start];
            arr[start] = tempVal;
        }
    }
void reversearlay(char[]arr){
int start=0,end=strlen(arr)-1,tempVal;
对于(;开始<结束;开始++,结束--){
//交换起始和结束位置
tempVal=arr[end];
arr[end]=arr[start];
arr[start]=tempVal;
}
}

我添加了一个答案,但是。。。当代码不工作时,为什么不在调试器中运行代码?这应该是询问堆栈溢出之前要做的第一件事。此外,使用适当的压痕。很抱歉,目前的款式是。。。呃,糟透了。我已经添加了一个答案,但是。。。当代码不工作时,为什么不在调试器中运行代码?这应该是询问堆栈溢出之前要做的第一件事。此外,使用适当的压痕。很抱歉,目前的款式是。。。呃,糟透了。@EricJablow如果n>0,它甚至不会进入OP的for循环体。@Matt Eric不是在说这个。我的答案中有一个错误,我现在通过删除它来修复。在for语句中可以使用两个变量:
for(size\t lower=0,upper=n;lower
。意图就更清晰了。@EricJablow如果n>0,它甚至不会进入OP的for循环体。@Matt Eric不是在说这个。我的答案中有一个错误,我现在通过删除它来修复。在for语句中可以使用两个变量:
for(size\t lower=0,upper=n;lower
。意图就更清晰了。耶,那是另一个。耶,那是另一个。