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.執行結果

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章