使用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语言实现字符串左旋和右旋问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • C语言 以字符串的形式读写文件详解及示例代码

    fgetc() 和 fputc() 函数每次只能读写一个字符,速度较慢:实际开发中往往是每次读写一个字符串或者一个数据块,这样能明显提高效率. 读字符串函数fgets fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的原型为: char *fgets ( char *str, int n, FILE *fp ); str 为字符数组,n 为要读取的字符数目,fp 为文件指针. 返回值:读取成功时返回字符数组首地址,也即 str:读取失败时返回 NULL:如果开始读取时

  • 详解C语言中的字符串拼接(堆与栈)

    首先来看一个demo: int do_sth(int type) { char *errstr; switch(type) { case 1: errstr = "Error";break case 2: errstr = "Warn";break case 3: errstr = "Info";break case 4: errstr = "Debug";break default: return 0; } if (...)

  • C语言 字符串首字母转换成大写简单实例

    C语言 字符串首字母转换成大写简单实例 举例: 输入:this is a book 返回:This Is A Book #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char input[]="this is a book"; char output[256]={'\0'}; int i,len; len=strlen(input); printf("

  • C语言左旋转字符串与翻转字符串中单词顺序的方法

    左旋转字符串 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef  左旋转 2  位得到字符串 cdefab.请实现字符串左旋转的函数. 要求时间对长度为 n  的字符串操作的复杂度为 O(n),辅助内存为 O(1). 分析: 网上看到解法很多种,就不详细说明了. 我采用的是数组不对称的交换时间复杂度应该是O(n). 代码实现(GCC编译通过): #include "stdio.h" #include "stdlib.h&q

  • C语言实现返回字符串函数的四种方法

    前言 C语言返回字符串函数共有四种方式,分别如下: 使用堆空间,返回申请的堆地址,注意释放 函数参数传递指针,返回该指针 返回函数内定义的静态变量(共享) 返回全局变量 下面来看看详细的介绍 其实就是要返回一个有效的指针,尾部变量退出后就无效了. 使用分配的内存,地址是有效 char *fun() { char* s = (char*)calloc(100, sizeof(char*) ); if (s) strcpy ( s , "abc " ); return s; } 但这种方式

  • C语言判断字符串是否以str2开头代码

    代码很简洁,功能也很简单,这里就不多废话了,直接把代码奉献给大家,有需要的小伙伴可以来参考下 #include <stdlib.h> #include <string.h> #include <stdio.h> /**判断str1是否以str2开头 * 如果是返回1 * 不是返回0 * 出错返回-1 * */ int is_begin_with(const char * str1,char *str2) { if(str1 == NULL || str2 == NULL

  • 使用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.后面的向后

  • Go语言实现字符串切片赋值的方法小结

    前言 在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要.本文通过示例详细介绍了Go语言实现字符串切片赋值的方法,感兴趣的朋友们跟着小编一起来看看吧. 1. 在for循环的range中 func StrRangeTest() { str := []string{"str1", "str2", "str3"} for i, v := range str { fmt.Println(i, v) v = "test&q

  • Go语言常用字符串处理方法实例汇总

    本文实例汇总了Go语言常用字符串处理方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import (     "fmt"     "strings"     //"unicode/utf8" ) func main() {     fmt.Println("查找子串是否在指定的字符串中")     fmt.Println(" Contains 函数的用法")    

  • Go语言对字符串进行MD5加密的方法

    本文实例讲述了Go语言对字符串进行MD5加密的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "crypto/md5"     "fmt"     "io" ) func main() {     h := md5.New()     io.WriteString(h, "welcome to jb51.net")     fmt.Printf(&quo

  • Go语言对字符串进行SHA1哈希运算的方法

    本文实例讲述了Go语言对字符串进行SHA1哈希运算的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: package main import (  "fmt"  "crypto/md5"  "crypto/sha1"  "io" ) //对字符串进行MD5哈希 func a(data string) string {  t := md5.New();  io.WriteString(t,data);  return

  • Go语言写入字符串到文件的方法

    本文实例讲述了Go语言写入字符串到文件的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package  main import "fmt" import "os" func main() {     fileName := "test.dat"     dstFile,err := os.Create(fileName)     if err!=nil{         fmt.Println(err.Error())  

  • Go语言截取字符串函数用法

    本文实例讲述了Go语言截取字符串函数用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: func Substr(str string, start, length int) string {     rs := []rune(str)     rl := len(rs)     end := 0             if start < 0 {         start = rl - 1 + start     }     end = start + length        

  • Go语言使用字符串的几个技巧分享

    一.字符串底层就是一个字节数组 这真的非常重要,而且影响着下面的其他几个技巧.当你创建一个字符串时,其本质就是一个字节的数组.这意味着你可以像访问数组一样的访问单独的某个字节.例如,下面的代码逐个打印字符串中的每个字节以及对应字节数组中的每个字节: package main import "fmt" func main() { str := "hello" for i := 0; i < len(str); i++ { fmt.Printf("%b

  • C语言实现字符串操作函数的实例

    C语言实现字符串操作函数的实例 在编写程序的过程中,我们经常使用到一些字符串函数,例如求字符串长度,拷贝字符串--,这些函数都在C标准库中存在,我们可以直接使用.但我们还需要掌握这些函数的实现方法,今天来看看一些常用的字符串操作函数的实现方法. 1.strlen strlen是用来求字符串长度的函数,字符串长度就是它所包含的字符个数. 今天给大家介绍三种实现strlen函数的方法 (1)定义一个计数器count //方式一:定义一个计数器 size_t my_strlen(const char

  • go语言实现字符串base64编码的方法

    本文实例讲述了go语言实现字符串base64编码的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "fmt"     "encoding/base64" ) func main() { var b bytes.Buffer w := base64.NewEncoder(base64.URLEncoding, &b) w.Write(data) w.Close() data := b.B

随机推荐