输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
答案:
方法一:拷贝原字符串,然后赋值到原数组中
#include <stdio.h>
#include <string.h>
int main() {
int n;
char arr[105] = {0}, a[105];
gets(arr);
scanf("%d", &n);
int k = strlen(arr);
n %= k;
while (n--) {
strcpy(a, arr);
for (int i = 0; i < k - 1; i++)
arr[i] = a[i + 1];
arr[k - 1] = a[0];
}
puts(arr);
return 0;
}
方法二:用临时变量,进行值调换
#include <stdio.h>
#include <string.h>
int main() {
char arr[105] = {0};
gets(arr);
int n;
scanf("%d", &n);
int tmp1, tmp2;
//tmp1为此次循环中<要赋的值>,tmp2为<被替换的值>
int len = strlen(arr);
while (n--) {
tmp1 = arr[0];
//第一次替换时需要把第一个值赋值给最后一个,所以此次循环中<要赋的值>为arr[0]
for (int i = len - 1; i >= 0; i--) {
//因为先把第一个值赋值到最后一个,最后一个先得到值,所以从最后一个下标开始
tmp2 = arr[i];
arr[i] = tmp1;
tmp1 = tmp2; //下次<要赋的值>变是上次<被替换的值>
}
}
puts(arr);
return 0;
}