栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言左旋转字符串,思想,解析

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言左旋转字符串,思想,解析

什么是左旋呢?

 

就是第一个字符放到最后一个字符呀!然后第二个字符和最后的字符依次往前挪。

哎呀讲半天,举个例子就知道了

eq:char arr1[10] = "ABCDEF"// 1

       char arr2[10] = "BCDEFA"//  2

这样就是说arr2是arr1左旋一次的值啦!


首先写好主体先哦

void string_rotate(char* arr, int k)
{
 
}


int main()
{
    //实现字符串的向左旋转
    int k = 2;//要向左旋转的次数
    char arr[10] = "ABCDEF";//要旋转的字符串

    string_left_rotate(arr , k);//多么霸气的函数名

    printf("旋转后的字符串:%sn", arr);//打印旋转后的字符串

    return 0;
}


那这个自定义函数该怎么写呢?

首先咱们要学会把问题转换为图,反正我不转化为图,我是理解不了的


 然后我把所有代码放在下面

void string_left_rotate(char* arr, int k)
{
    assert(arr);//不允许传空指针
    int len = strlen(arr);//计算字符串的长度
    char temp = 0;
    int i = 0;
    int j = 0;
    for (i = 0; i < k; i++)
    {
        temp = *arr;//首个元素赋值给temp

        for (j = 0; j < len - 1; j++)
        {
            *(arr + j )= *(arr + 1 + j);//总共把len-1的元素往前挪移
        }
        *(arr + len - 1) = temp;//把首个元素放到最后
    }
    
}

里面如果有哪个库函数不懂的或者头文件不知道的可以去www.cplusplus.com找哦

那写完这个代码之后,可以运行,我们的任务就结束了么?

当然不,我们还要想其他的办法,是不是还要其他的办法,所以下面我再写一个办法


名字叫做三步反转法    牛吧!

那三步反转法怎么搞呢,那么我继续画图来给你们解释

同样的先写出代码主体


void reverse(char* left, char *right)
{
   
    
}
void string_left_rotate(char* arr, int k)
{
  
}
int main()
{
    //三步反转法
    
    int k = 4;//要向左旋转的个数

    char arr[10] = "ABCDEF";

    string_left_rotate(arr, k);

    printf("旋转后的字符串:%sn", arr);

    return 0;
}



 代码如下

void reverse( char* left,  char *right)
{
    assert(left);//不允许传空值
    assert(right);//不允许传空值
    while (left < right)//left与right这里是指地址
    {
        char temp = *left;//解引用后就是所对应地址的字符
                          //所以没有解引用的指针看作为地址,解引用后的指针看作为值
        *left = *right;
        *right = temp;
        left++;
        right--;//实现在规定的范围(left和right之间)的交换
    }
    
}
void string_left_rotate(char* arr, int k)
{
    assert(arr);//不允许传空值

    int len = strlen(arr);//字符串总长度

    reverse(arr, arr + k - 1);//反转前k个
    reverse(arr + k, arr + len - 1);//反转后len - k个
    reverse(arr, arr + len - 1);//整体反转
}


总结:这个左旋让我感觉很像数据结构的顺序表插入,不过我还是用来理解指针的使用,指针很重要,也不好学,我感觉还是得多刷题,在题中理解知识点,并且希望大佬来指正下,看有没有需要改进的地方,还有这个左旋的问题还有很多解法,不单单这一种解法,在一本叫做《程序编程艺术》中就有全部的解法,但他的方法就是所有的方法了么?还需要你去探索哦!


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号