c - C 中的字符数组移位

标签 c arrays string

例如,如果我在字符数组中有一个字符串,例如“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/

相关文章:

c - 用另一个字符串替换部分字符串会导致段错误

arrays - $lookup 结果使用另一个数组中的键排序

ruby - Ruby 中过去时的 ActiveSupport 变形库?

c - 为什么声明的原型(prototype)的函数类型不需要与实际函数的类型匹配?

c - C中puts函数的返回值

c - 不正确的变量值递增

javascript - 这个for循环有什么问题?

C++ 数组 : conversion of contained type

字符串到 Int 列表

PHP将对象转换为字符串