C语言编程C++旋转字符操作串示例详解

 更新时间:2021年09月28日 10:12:20   作者:小码农UU  
这篇文章主要为大家介绍了C语言编程中C++旋转字符操作串示例详解,文中附含详细图文示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助

旋转字符串

字符串左旋

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

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

题前认知:

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

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

暴力移位:

#include<stdio.h>
#include<string.h>
char* 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;
}

输出结果

image-20210909232922661

三步翻转:

#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* head, char* tail) //字符串逆序
{
	assert(head && tail);//断言阻止空指针
	char tmp = 0;
	char* ptmp = &tmp;
	while (head<tail)
	{
		tmp = *head;
		*head = *tail;
		*tail = tmp;
		head++;
		tail--;
	}
	return 0;
}
char* turn_left(char* arr, int num)
{
	assert(arr);
	int len = strlen(arr);
	if (len)
	{
		int n = num % len;           //防止num会越界操作,所以必须是num模len才可,还要保证len不为0
		reverse(arr, &arr[n - 1]);          //逆序左边
		reverse(&arr[n], &arr[len - 1]);  //逆序右边
		reverse(arr, &arr[len - 1]);      //逆序整体
		return arr;
	}
	else
	{
		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;
}

image-20210910003317406

image-20210910100918779

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

判断字符串旋转

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

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

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

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

题前认知

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

字符串追加判断

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

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

image-20210913231753342

#include<stdio.h>
#include<string.h>
#include<assert.h>
int 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;
}

结果

image-20210913231922969

以上就是C语言编程C++旋转字符操作串示例详解的详细内容,更多关于C语言编程C++旋转字符串的资料请关注脚本之家其它相关文章!

相关文章

  • C++标准库介绍及使用string类的详细过程

    C++标准库介绍及使用string类的详细过程

    C++中将string封装为单独的类,string 类是 C++ 标准库中的一个非常重要的类,用于表示和操作字符串,这篇文章主要介绍了C++标准库介绍及使用string类,需要的朋友可以参考下
    2024-08-08
  • 深入浅析C++ traits技术

    深入浅析C++ traits技术

    traits就是提取“被传进的对象”对应的返回类型,让同一个接口实现对应的功能。因为STL的算法和容器是分离的,两者通过迭代器链接,本文通过实例代码给大家介绍C++ traits技术,感兴趣的朋友一起看看吧
    2021-05-05
  • C++实现 vector 的四则运算

    C++实现 vector 的四则运算

    本文给大家介绍的是在C++中实现高效的vector四则运算的方法的相关资料,需要的朋友可以参考下
    2016-07-07
  • vc中使用SendMessage自定义消息函数

    vc中使用SendMessage自定义消息函数

    这篇文章主要介绍了vc中使用SendMessage自定义消息函数的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++超详细讲解数组操作符的重载

    C++超详细讲解数组操作符的重载

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符等。接下了让我们探究一下数组操作符的重载
    2022-06-06
  • vscode ssh远程连接服务器一直卡在下载 vscode server问题解决

    vscode ssh远程连接服务器一直卡在下载 vscode server问题解决

    在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,本文主要介绍了vscode ssh远程连接服务器一直卡在下载 vscode server问题解决,感兴趣的可以了解一下
    2025-01-01
  • C++赋值函数+移动赋值函数+移动构造函数详解

    C++赋值函数+移动赋值函数+移动构造函数详解

    这篇文章主要介绍了C++赋值函数+移动赋值函数+移动构造函数详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • C语言实现班级学生管理系统

    C语言实现班级学生管理系统

    这篇文章主要为大家详细介绍了C语言实现班级学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 解析C++中std::ref的使用

    解析C++中std::ref的使用

    这篇文章主要介绍了解析C++中std::ref的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C语言修炼之路灵根孕育源流出 初识C言大道生上篇

    C语言修炼之路灵根孕育源流出 初识C言大道生上篇

    C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言
    2022-03-03

最新评论