C语言左旋字符串详解(付完整代码)

这篇具有很好参考价值的文章主要介绍了C语言左旋字符串详解(付完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

暴力求解

优雅求解


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

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

暴力求解

 每左旋转1个字符串,旋转k次,这种方法效率比较低,因为在多次旋转过程中,某几个字符要多次移动。

#include <stdio.h>
#include <string.h>
#include <assert.h>
void left_move(char* str, int k)
{
	assert(str);
	int j = 0;
	for (j = 0; j < k; j++)
	{
		char tmp = *str;

		int len = strlen(str);
		int i = 0;
		for (i = 0; i < len - 1; i++)
		{
			str[i] = str[i + 1];
		}
		str[i] = tmp;
	}	
}
int main()
{
	char arr[] = "abcdef";
	int k = 0;
	scanf("%d", &k);

	left_move(arr, k);

	printf("%s\n", arr);

	return 0;
}

优雅求解

把整个字符串从待旋转的位置后边分开,分为左侧和右侧,经过这几个过程:1.逆序左侧 2.逆序右侧 3.逆序整个字符串。经过三次旋转,得到想要的左旋效果。

#include <stdio.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)
{
	assert(str);
	int len = strlen(str);
	k %= len;
	//左边逆序
	reverse(str, str + k - 1);
	//右边逆序
	reverse(str + k, str + len - 1);

	//整体逆序
	reverse(str, str + len - 1);


}
int main()
{
	char arr[] = "abcdef";
	int k = 0;
	scanf("%d", &k);

	left_move(arr, k);

	printf("%s\n", arr);

	return 0;
}

C语言左旋字符串详解(付完整代码),C语言经典习题,c语言,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-688117.html

到了这里,关于C语言左旋字符串详解(付完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法刷题-字符串-左旋转字符串

    反转个字符串还有这么多用处? 力扣题目链接 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串\\\"abcdefg\\\"和数字2,该函数将返回左旋转两位得到的结果\\\"cdefgab\\\"。 示例 1: 输入: s = “abcde

    2024年02月09日
    浏览(47)
  • (字符串 ) 剑指 Offer 58 - II. 左旋转字符串 ——【Leetcode每日一题】

    难度:简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串\\\"abcdefg\\\"和数字2,该函数将返回左旋转两位得到的结果\\\"cdefgab\\\"。 示例 1: 输入: s = “abcdefg”, k = 2 输出: “cdefgab” 示例 2:

    2024年02月08日
    浏览(45)
  • 剑指Offer--05替换空格&&58左旋字符串

    题目是这样的 意思是将字符串s中的空格替换为字符串\\\"%20\\\",如果只是替换一个字符还好,可以在原数组直接替换,但是是将空格替换为字符串,所以再在原数组上替换,原数组原内容会被覆盖,且长度大小不够,所以此时要动态开辟一个字符数组,这个数组开多大?考虑最坏

    2024年02月06日
    浏览(47)
  • 【算法第六天7.19】反转字符串,反转字符串||,剑指 Offer 05. 替换空格,反转字符串的单词, 左旋转字符串

    ================================================ 思路 :以中间为分界线,左右两个边界交换字符,依次向里收缩 思路 : 首先:字符串转化为字符数组 char[] res = s.toCharArray(); 最后:将数组再转回字符串 return new String(res); 1、循环以2k为单位, 2、在这个2k长的数组中进行反转,需要有首

    2024年02月16日
    浏览(62)
  • LeetCode:剑指 Offer 58 - II. 左旋转字符串

    🍎道阻且长,行则将至。🍓 🌻算法,不如说它是一种思考方式🍀 算法专栏: 👉🏻123 题目描述 :字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串\\\"abcdefg\\\"和数字2,该函数将返回左旋

    2024年02月02日
    浏览(46)
  • C语言字符串详解

    目录 一、字符串的概念 二、占用内存的情况 三、字符串的初始化 四、字符串与指针  五、字符串的结尾标志 六、字符串常用的库函数 1、获取字符串的长度(strlen) 举个例子 运行效果 自己实现一个 strlen 函数 运行效果 2、字符串复制或赋值(strcpy)  自己实现一个 strcp

    2024年01月23日
    浏览(40)
  • C语言字符函数和字符串函数详解

           Hello, 大家好,我是一代,今天给大家带来有关字符函数和字符串函数的有关知识        所属专栏:C语言        创作不易,望得到各位佬们的互三呦 在C语言中有一些函数是专门为字符设计的,这些函数的使用都需要包含一个头文件ctype.h 如:(注:以下函数原型都

    2024年03月20日
    浏览(51)
  • c语言中字符串详解

    C 语言中没有字符串这种数据类型,可以通过char型数组来替代 ; 注意: C 语言中,字符串一定是一个char型数组,但char型数组未必是字符串; 在C语言的char型数组中,数字0(和字符‘\\0’等价)结尾的char数组就是一个字符串,但如果 char 型数组没有以数字0结尾,那么就不是

    2023年04月08日
    浏览(32)
  • 字符串函数(C语言详解)

    字符串是一串连续的且以\\0结尾的字符 注意: 1.以第一种形式初始化字符串时,计算机会自动在字符串末尾加上\\0,所以在给数组申请内存空间时,需要多申请一个字节的内存来存放\\0 2.第二种形式是 常量字符串 ,是 不可以被修改 的 3.第三种形式是字符数组,末尾没有\\0,输

    2024年03月17日
    浏览(45)
  • C语言——详解字符函数和字符串函数(二)

    Hi,铁子们好呀!之前博主给大家简单地介绍了部分 字符和字符串函数 ,那么这次,博主将会把这些字符串函数给大家依次讲完! 今天讲的具体内容如下: 6.1.1 strcmp 函数介绍 它的函数原型如下: 具体的函数介绍如下图所示: 从图中我们得知: - 如果第一个字符串 PTR1 大于

    2024年04月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包