Это 3 * обратный метод, который я упоминал в комментариях. Просто C, никаких классных струнных классов. Для обмена требуется только один элемент хранилища.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int array[] = { 0, 1,2,3,4,5,6,7,8,9} ;
#define COUNT (sizeof array / sizeof array[0])
void reverse(int *arr, size_t siz);
void doprint(int *arr, size_t siz);
int main(int argc, char **argv)
{
unsigned pos = 3;
if (argc >1 && argv[1]) sscanf(argv[1], "%u", &pos);
if (pos >= COUNT) exit(1);
doprint(array, COUNT);
reverse(array,COUNT);
reverse(array,pos);
reverse(array+pos,COUNT-pos);
doprint(array, COUNT);
return 0;
}
void doprint(int *arr, size_t siz)
{
while( siz--) {
printf(" %d", *arr++);
}
printf("\n");
}
void reverse(int *arr, size_t siz)
{
int * end;
for (end= arr+siz-1; end > arr; end--,arr++) {
int tmp;
tmp = *arr;
*arr = *end;
*end = tmp;
}
}
Для тех, кто не верит, вот результат:
$ ./a.out 3
0 1 2 3 4 5 6 7 8 9
7 8 9 0 1 2 3 4 5 6