千家信息网

如何使用C语言编程C++旋转字符操作串

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍"如何使用C语言编程C++旋转字符操作串",在日常操作中,相信很多人在如何使用C语言编程C++旋转字符操作串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月23日如何使用C语言编程C++旋转字符操作串

这篇文章主要介绍"如何使用C语言编程C++旋转字符操作串",在日常操作中,相信很多人在如何使用C语言编程C++旋转字符操作串问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用C语言编程C++旋转字符操作串"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录
  • 旋转字符串

    • 字符串左旋

    • 题前认知:

    • 暴力移位:

    • 三步翻转:

  • 判断字符串旋转

    • 题前认知

    • 字符串追加判断

旋转字符串

字符串左旋

实现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

题前认知:

一个字符串如果就定死了。eg:char arr[]="dfdf"什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个体,不适合集群,但也是比死板的定死字符串舒服)

所以字符串得是我们可输入的,才有可玩性,玩的不尽性就循环

暴力移位:

#include#includechar* turn_left(char* arr, int num){        int len = strlen(arr);        int i = 0;        //左旋数是多少就进行几次移位        for (i = 0; i < num; i++)        {                //每次移位就是单次左旋                int j = 0;                char tmp = arr[0];//每次都把首元素存起来                for (j = 0; j < len-1; j++)                {                                               arr[j] = arr[j + 1];                                        }                arr[len-1] = tmp;//把存起来的首元素放到最后一位        }        return arr;}int main(){        char arr[100] = {0};        int num = 0;        while (1)        {                printf("请输入想要旋转的字符串:>");                gets(arr);                printf("请输入想要左旋数:>");                scanf("%d", &num);                getchar();//这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话                //下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区                printf("左旋字符串为:%s\n", turn_left(arr, num));        }        return 0;}

输出结果

三步翻转:

#include#include#includevoid reverse(char* head, char* tail) //字符串逆序{        assert(head && tail);//断言阻止空指针        char tmp = 0;        char* ptmp = &tmp;        while (head");                gets(arr);                printf("请输入想要左旋数:>");                scanf("%d", &num);                getchar();//这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话                //下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区                printf("左旋字符串为:%s\n", turn_left(arr, num));        }        return 0;}

还有3种方法但那三种就需要很强的数学功底了,具体的我也看不懂他怎么证明的数学公式,就不看了。哈哈哈

判断字符串旋转

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

题前认知

大家现在应该知道我干啥,没错我倡导交互,两个字符串都是我们写

字符串追加判断

(面试的时候能用库函数就用库函数)

什么叫字符串追加判断呢 例如asdfg这个字符串

#include#include#includeint is_left_move(char* str1, char* str2){               assert(str1 && str2);        int len1 = strlen(str1);        int len2 = strlen(str2);        //长度不同就肯定不是旋转字符串        if (len1 - len2)                return 0;        //在arr1字符串中追加一个自己        strncat(str1, str1, len1);        //判断判断的那个字符串是不是追加字符串的子串        char* ret = strstr(str1, str2);        if (ret == NULL)                return 0;        else                return 1;}int main(){        char arr1[50] = {0};//有足够的空间        char arr2[50] = {0};        while (1)        {                printf("请输入字符串:>");                gets(arr1);                printf("请输入需判断的旋转字符串:>");                gets(arr2);                int ret = is_left_move(arr1, arr2);                if (ret == 1)                {                        printf("是旋转字符串\n");                }                else                {                        printf("不是旋转字符串\n");                }        }               return 0;}

结果

到此,关于"如何使用C语言编程C++旋转字符操作串"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0