在C中反转数组?

嗨,我试图实现一个反向数组代码但它似乎没有工作,我真的不知道为什么。 For循环似乎不起作用。 我不知道为什么,因为逻辑对我来说似乎很合适。

#include  #include  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); */ 

 void reverse(char, int); //declaration wrong void reverse(char[], int); ^^^ 

你的循环

 for ( i = 0; i >= n ; i++) // this fails i=0, n=some size 

应该

 for ( i = 0; i <= n ; i++) 

避免使用gets() fgets()而是使用fgets()

for循环条件应为’i

for循环条件应为’i

和“int n”是数组的大小。 因此,“i <= n”会使相同的数组从中间到中间反转,并从中到中反转。 所以结果与数组相同。 将“n”设为数组大小的一半。

我认为最好使用宏来完成这项任务。 在下面的代码中,它是一个宏SWAP


内容文件main.c

 #include  #include  // swap values with respect a type it #ifndef SWAP #define SWAP(type, a, b) \ { \ type temp = a; \ a = b; \ b = temp; \ } #endif /* Print an array integer items */ void printIntArray(int array[], size_t length) { char ending_charapter[] = ", "; putchar('['); for (size_t i = 0; i < length; ++i) { printf("%d", array[i]); if (i < length - 1) { printf("%s", ending_charapter); } } puts("]"); } /* Print an array float items */ void printFloatArray(float array[], size_t length) { char ending_charapter[] = ", "; putchar('['); for (size_t i = 0; i < length; ++i) { printf("%f", array[i]); if (i < length - 1) { printf("%s", ending_charapter); } } puts("]"); } /* Reverse an integer array in place */ static int reverseIntArray(int *array, const size_t length) { for (int i = 0; i < length / 2; ++i) { SWAP(int, array[i], array[length - i - 1]); } return 0; } /* Reverse an float array in place */ static int reverseFloatArray(float *array, const size_t length) { for (int i = 0; i < length / 2; ++i) { SWAP(float, array[i], array[length - i - 1]); } return 0; } /* Reverse an string */ static int reverseString(char string[]) { size_t str_len = strlen(string); for (int i = 0; i < str_len / 2; ++i) { SWAP(char, string[i], string[str_len - i - 1]); } return 0; } int main (const int argc, const char *argv[]) { puts("An example reverse for a int array"); int arrInt[4] = {1, -2, 3, -4}; printIntArray(arrInt, 4); reverseIntArray(arrInt, 4); printIntArray(arrInt, 4); puts("An example reverse for a float array"); float arrFloat[4] = {0.1, -2.12, 1.3, -4.2}; printFloatArray(arrFloat, 4); reverseFloatArray(arrFloat, 4); printFloatArray(arrFloat, 4); puts("An example reverse for a string"); char str[] = "Simple text"; puts(str); reverseString(str); puts(str); return 0; } 

编译为:

 gcc std=c11 -I /usr/include/ -o main main.c 

结果:

 An example reverse for a int array [1, -2, 3, -4] [-4, 3, -2, 1] An example reverse for a float array [0.100000, -2.120000, 1.300000, -4.200000] [-4.200000, 1.300000, -2.120000, 0.100000] An example reverse for a string Simple text txet elpmiS 

笔记:

  1. 刚刚工作
  2. 使用任何内置类型的Workint
  3. 测试不佳,仅使用GCC编译器
  4. 基于

    4.1 定义预处理器宏交换(t,x,y)

    4.2 反转arrays到位

    4.3关于这个问题的答案


测试环境

 $ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.6 (jessie) Release: 8.6 Codename: jessie $ uname -a Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux $ gcc --version gcc (Debian 4.9.2-10) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.