例如,如果我在char数组中有一个字符串,如" abcdef",那么我想打印一个新的字符串" bcdefa"接下来就是" cdefab"依此类推,直到它循环通过字符串结束于" fabcde"
对不起,我是C的新手,并不是最好的数组操作,也不确定什么是最简单的方法。
我在考虑可能首先重新排列索引?但我不确定如何循环。或者我可以使用string.h库中的某些函数以更有效的方式处理它吗?
答案 0 :(得分:2)
这称为阵列旋转,这是一个很好的技巧。你反转两个部分,然后你扭转整个事情。这是一个例子:
#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
答案 1 :(得分:1)
这是字符串:
char str[] = "abcdef";
保存第一个字符,因为稍后会覆盖它:
char tmp = str[0];
然后将字符串的其余部分向前移动一个字符。请注意,此处不允许strcpy()
,因为在重叠的字符串上,行为是未完成的。
memmove(str, &(str[1]), strlen(&(str[1])));
然后将保存的第一个字符存储在最后:
str[strlen(str) - 1] = tmp;
完成一次轮换。和
printf("%s\n", str);
将显示bcdefa
。