将字符串左旋
例如:abcd
旋一次:bcda
旋两次:cdab
旋三次:dabc
旋四次:abcd
思路1
思路2:用到了库函数
思路3:
代码:
//字符串左旋
//法一
//#include<stdio.h>
//#include<string.h>
//void leftRound(char str[], int k) {
// int len = strlen(str);
// int time = k % len;
// int i = 0;
// char tmp = 0;
// int j = 0;
// for (i = 0; i < time; i++) {
// tmp = str[0];
// for (j = 0; j < len - 1; j++) {
// str[j] = str[j + 1];
// }
// str[j] = tmp;
// }
//}
//int main() {
// char str[] = "abcde";
// printf("请输入要左旋的次数:> ");
// int k = 0;
// scanf("%d", &k);
// leftRound(str, 3);
// printf("%s\n", str);
// return 0;
//}
//法二
//#include<stdio.h>
//#include<stdio.h>
//void leftRound(char str[], int k) {
// int len = strlen(str);
// int time = k % len;
// char tmp[256] = { 0 };
// //拷贝
// strcpy(tmp, str + time);
// //拼接
// strncat(tmp, str, time);
// //拷贝
// strcpy(str, tmp);
//}
//int main() {
// char str[] = "abcde";
// leftRound(str, 5);
// printf("%s\n", str);
// return 0;
//}
//法三(三步翻转)
#include<stdio.h>
#include<string.h>
void Reverse(char* str, int left, int right) {
char tmp = 0;
while (left < right) {
/* tmp = str[left];
str[left] = str[right];
str[right] = tmp;*/
tmp = *(str + left);
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
void leftRound(char* str, int k) {
int len = strlen(str);
int time = k % len;
Reverse(str, 0, k - 1);
Reverse(str, k, len - 1);
Reverse(str, 0, len - 1);
}
int main() {
char str[] = "abcd";
leftRound(str,3);
printf("%s\n", str);
return 0;
}