三种方法实现一个函数,可以左旋字符串中的k个字符

例如:abcd左旋一个字符得到bcda,abcd左旋两个字符得到cdab
1.数组下标法

成都创新互联公司是一家集网站建设,龙山企业网站建设,龙山品牌网站建设,网站定制,龙山网站建设报价,网络营销,网络优化,龙山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

#include
#include

void left_handed(char *str, int k)
{
    int i;
    int count = 0;
    char temp;
    while (count < k)
    {
        temp = str[0];
        for (i = 0; i < strlen(str)-1; i++)
        {
            str[i] = str[i + 1];//所有字符左移一位
        }
        count++;
        str[strlen(str) - 1] = temp;
    }
}
int main()
{
    int k=0;
    char str[] = "abcdef";
    printf("输入需要左旋多少个字符:\n");
    scanf("%d",&k);
    left_handed(str,k);
    printf("%s",&str);
    return 0;
}

2.指针法

#include

void left_move(char *str, int k)
{
    while (k--)//相当于k!=0
    {
        char *cur = str;//定义一个指针,存储字符串首地址
        char tmp=*cur;
        while ((*(cur+1)) != '\0')
        {
            *cur = *(cur + 1);//字符串左移一位
            cur++;
        }
        *(cur) = tmp;
    }
}
int main()
{
    char str[] = "abcd";
    int k = 0;
    printf("请输入左移位数:\n");
    scanf("%d",&k);
    left_move(str, k);
    printf("%s",str);
    return 0;
}

3.指针==》逆序法

#include
#include

void Reverse(char *left, char *right)//逆序函数
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
void left_move(char *str, int k, int len)//左旋函数
{
    char *left = str;
    char *right = str+len - 1;
    if (k<0 || k>len)
    {
        printf("不合法!\n");
    }
    else
    {
        Reverse(left, str+k-1);//地址,需要逆序的左右位置
        Reverse(str+k , right);
        Reverse(left, right);
    }
}
int main()
{
    int k;
    printf("请输入左移位数:\n");
    scanf("%d",&k);
    char str[] = "abcd";
    int len = strlen(str);
    left_move(str,k,len);
    printf("%s",str);
    return 0;
}

分享标题:三种方法实现一个函数,可以左旋字符串中的k个字符
URL分享:http://hbruida.cn/article/jdhssc.html