C 寫一個函式使字串向左移指定個位
阿新 • • 發佈:2019-01-02
1.題目
實現一個函式,可以左旋字串中的k個字元。
ABCD左旋一個字元得到BCDA
ABCD左旋兩個字元得到CDAB
2.程式程式碼
方法一:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <Windows.h>
void left_move(char arr[7], int num, int sz)//自定義函式,實現題目要求
{
int i = 0;
int j = 0;//定義引數,控制迴圈
char mid = 0;//定義引數作為中間量
while (num >= sz)//如果要移動的位數大於等於字串長度,執行此操作
{
if (num > sz)
{
num = num % sz;//若大於則對該數模上字串長度取餘
}
else
{
return 0;//如果相等的話,則字串本身和移動後的結果相同
}
}
while (j < num)//控制移動的位數
{
mid = arr[0];//把第一個元素的值賦給中間量
i = 0;//每次進到迴圈都要給i初始化
while (i < sz - 1)//i不能超過字串的長度-1
{
arr[i] = arr[i + 1];//把後一個元素的內容賦給前一個元素
i++;
}
arr[sz - 1] = mid;
j++;
}
return 0;
}
int main()
{
char arr[] = "ABCDEF";
int num = 0;
int sz = sizeof(arr) / sizeof(arr[0]) - 1;
printf ("please input the number of moves:\n");
scanf("%d", &num);
left_move(arr, num, sz);
printf("%s", arr);
system("pause");
return 0;
}
方法二:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <Windows.h>
#include <string.h>
void change(char *l, char *r)//自定義函式,逆置字串中的元素
{
int mid = 0;
while (l <= r)
{
mid = *l;
*l = *r;
*r = mid;
l++;
r--;
}
}
void left_move(char arr[], int num)
{
int len = strlen(arr);//求字串長度
change(arr, arr + num - 1);//逆置要左移的元素
change(arr + num, arr + len - 1);//逆置其餘的元素
change(arr, arr + len - 1);//把分別逆置後的字串再次逆置
}
int main()
{
char arr[] = "ABCDEF";
int num = 0;
printf("please input the number of move:");
scanf("%d", &num);
left_move(arr, num);
printf("%s", arr);
system("pause");
return 0;
}