0

大家好,我似乎无法反转我的数组,我的语法看起来不错,我的逻辑看起来不错,但 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); */
4

3 回答 3

3

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

i >= n应该是i < n / 2

于 2013-10-10T21:10:30.230 回答
2

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

void reverse(char, int);

至:

void reverse(char *, int);
             ^^^^^^

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

于 2013-10-10T21:19:37.777 回答
0

这是 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;
        }
    }
于 2018-08-20T08:49:10.430 回答