例如,如果我在字符数组中有一个字符串,例如“abcdef”,那么我想打印一个新字符串“bcdefa”,然后下一个将是“cdefab”,依此类推,直到它循环遍历结束的字符串在“fabcde”
抱歉,我是 C 语言新手,不是最好的数组操作,并且不确定什么是最简单的方法。
我在想也许一开始重新排列索引?但我不知道如何循环它。或者我可以使用 string.h 库中的某些函数以更有效的方式解决这个问题吗?
最佳答案
这称为数组旋转,有一个很好的技巧。你颠倒了两个部分,然后你颠倒了整个事情。这是一个例子:
#include <stdio.h>
#include <string.h>
void swap(char* a, char* b) {
char tmp = *a;
*a = *b;
*b = tmp;
}
void rev(char* array, size_t n) {
for (size_t i = 0; i < n / 2; i++)
swap(array + i, array +(n - i - 1));
}
void rotate_one(char* str) {
rev(str + 1, strlen(str) - 1);
rev(str, strlen(str));
}
参见 Demo
关于c - C 中的字符数组移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583585/