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.执行结果

这里写图片描述

阅读更多
个人分类: C语言
上一篇C 二维矩阵查找数字
下一篇C 判断一个字符串是否由另一个字符串旋转得到
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭