使用C语言实现字符串左旋和右旋问题分享!

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

ABCD左旋一个字符得到BCDA

 ABCD左旋两个字符得到CDAB

 1.暴力移位法

  #include <stdio.h>  #include <stdlib.h>  #include <string.h>  void left_move(char*str, int k)  {    int len = 0;    int i = 0;    while (k--)    {      //1.把第一个保存起来      char tmp = *str;      //2.后面的向后移动      len = strlen(str);      for (i = 0; i < len; i++)      {        *(str + i) = *(str + 1 + i);      }      //3.把保存的数据放在最后一位      *(str + len - 1) = tmp;    }  }  int main()  {    char arr[] = "ABCD";    int n = 0;    printf("请输入左旋位数:");    scanf_s("%d", &n);    left_move(arr, n);    printf("%s ", arr);    system("pause");    return 0;  }

2.三步翻转法

  #include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <assert.h>  void reverse(char *left, char* right)  {    assert(left&&right);//断言    while (left < right)    {      char tmp = *left;      *left = *right;      *right = tmp;      left++;      right--;    }  }  void left_move(char*str, int k)  {    int len = strlen(str);    reverse(str, str + k - 1);//逆序前半部分    reverse(str+k, str + len - 1);//逆序后半部分    reverse(str, str+ len - 1);//逆序整个字符串  }  int main()  {    char arr[] = "ABCD";    int n = 0;    printf("请输入左旋位数:");    scanf_s("%d", &n);    left_move(arr, n);    printf("%s ", arr);    system("pause");    return 0;  }

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

ABCD右旋一个字符得到DABC

 ABCD右旋两个字符得到CDAB

1.暴力移位法

  #include <stdio.h>  #include <stdlib.h>  #include <string.h>  void right_move(char* p, int k)  {   int len = strlen(p);   for (int i = 0; i < k; ++i)//控制旋转次数   {     char tmp = p[len - 1];     for (int j = len - 1; j > 0; --j)//完成一次旋转     {       p[j] = p[j - 1];     }     p[0] = tmp;   }  }  int main()  {    char arr[] = "ABCD";    int n = 0;    printf("请输入右旋位数:");    scanf_s("%d", &n);    right_move(arr, n);    printf("%s ", arr);    system("pause");    return 0;  }

2.三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者

先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以

具体代码如下:

  #include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <assert.h>  void reverse(char *left, char* right)  {    assert(left&&right);//断言    while (left < right)    {      char tmp = *left;      *left = *right;      *right = tmp;      left++;      right--;    }  }  void right_move(char*str, int k)  {    int len = strlen(str);    reverse(str, str + len-k -1);//逆序前半部分    reverse(str+len-k, str + len - 1);//逆序后半部分    reverse( str ,str + len - 1);//逆序整个字符串    reverse(str, str + len - 1);//逆序整个字符串    reverse(str, str + k - 1);//逆序前半部分    reverse(str+k, str + len - 1);//逆序后半部分  }  int main()  {    char arr[] = "ABCDEFG";    int n = 0;    printf("请输入右旋位数:");    scanf_s("%d", &n);    right_move(arr, n);    printf("%s ", arr);    system("pause");    return 0;  }

总结

以上所述是小编给大家介绍的使用C语言实现字符串左旋和右旋问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对<计算机技术网(www.ctvol.com)!!>网站的支持!

—-想了解使用C语言实现字符串左旋和右旋问题分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/482434.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐