c语言代码练习35

问:将字符串的n个字符左旋

例 :asdf左旋一个sdfa

asdf左旋两个dfas

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>

void Ayue(char* ar, int k)
{
    int i = 0;
    int sz = strlen(ar);
    for (i = 0; i < k; i++)
    {
        char tmp = *ar;
        int j = 0;
        for (j = 0; j < sz-1; j++)
        {
            *(ar + j) = *(ar + j + 1);
        }
        *(ar + sz - 1) = tmp;
    }
}
int main()
{
    char ar[] = "abcdef";
    Ayue(ar, 2);
    printf("%s\n",ar);
    return 0;
}

 

方法二

三步逆旋法

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
#include<assert.h>

void Mylift(char* left, char* right)
{
    assert(left != NULL);
    assert(right != NULL);
    char rmp = 0;
    while (left<right)
    {
        rmp = *left;
        *left = *right;
        *right = rmp;
        right--;
        left++;
    }
}

void Ayue(char* arr, int k)
{
    assert(arr);
    int sz = strlen(arr);
    assert(k < sz);
    Mylift(arr,arr+k-1);//逆序左边
    Mylift(arr+k,arr+sz-1);//逆序右边
    Mylift(arr,arr+sz-1);//逆序整体
}

int main()
{
    char arr[] = "abcdef";
    Ayue(arr, 2);
    printf("%s\n", arr);
    return 0;
}

 

posted @ 2023-10-24 15:07  小菜阿跃  阅读(15)  评论(0)    收藏  举报