1. 程式人生 > >C 寫一個函式使字串向左移指定個位

C 寫一個函式使字串向左移指定個位

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;
}

3.執行結果

這裡寫圖片描述