题目:字符串左旋
内容:实现一个函数,可以左旋字符串中的K个字符。
例如:
ABCDEF左旋一个字符可以得到BCDEFA
ABCDEF左旋两个字符可以得到CDEFAB
方法一:移动字符
#include <stdio.h>
#include <string.h>char* left_round(char* str, int k)
{int len = strlen(str);int times = k % len;for (int i = 0; i < times; i++){char tmp = str[0];int j = 0;for (; j < len - 1; j++){str[j] = str[j + 1];}str[j] = tmp;}return str;
}int main()
{char str[] = { "ABCDEF" };int k = 0;scanf("%d", &k);left_round(str, k);printf("%s", str);return 0;
}
方法二:逆序字符串
//参考代码#include <stdio.h>
#include <string.h>void reverse(char* str, int strat, int end)
{int i, j;char tmp;for (i = strat, j = end; i < j; i++, j--){tmp = str[i];str[i] = str[j];str[j] = tmp;}
}void left_round(char* str, int k)
{int len = strlen(str);int times = k % len;reverse(str, 0, k - 1);//逆序前段字符reverse(str, k, len - 1);//逆序后段字符reverse(str, 0, len - 1);//逆序整体字符
}int main()
{char str[] = { "ABCDEF" };int k = 0;scanf("%d", &k);left_round(str, k);printf("%s", str);return 0;
}
方法三:使用字符函数
#include <stdio.h>
#include <string.h>void left_round(char* str, int k)
{int len = strlen(str);int times = k % len; //假设结果为3 可使用malloc len+1 来设置大小char tmp[256]; //相当于一个空箱子strcpy(tmp, str + times); //将ABCDEF 中的DEF拷贝进入tmpstrncat(tmp, str, times); //将ABCDEF 中的ABC附加在tmp后,times是限制个数strcpy(str, tmp); //最后将tmp拷贝进入str
}int main()
{char str[] = { "ABCDEF" };int k = 0;scanf("%d", &k);left_round(str, k);printf("%s", str);return 0;
}