如何使用C语言编程C++旋转字符操作串
导读:本文共3174字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 目录旋转字符串字符串左旋题前认知:暴力移位:三步翻转:判断字符串旋转题前认知字符串追加判断旋转字符串字符串左旋实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB题前认知:一个字符串如果就定死了。eg:char arr[]=“dfdf”什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个... ...
目录
(为您整理了一些要点),点击可以直达。目录
旋转字符串
字符串左旋
题前认知:
暴力移位:
三步翻转:
判断字符串旋转
题前认知
字符串追加判断
旋转字符串
字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
题前认知:
一个字符串如果就定死了。eg:char arr[]=“dfdf”什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个体,不适合集群,但也是比死板的定死字符串舒服)
所以字符串得是我们可输入的,才有可玩性,玩的不尽性就循环
暴力移位:
#include<stdio.h>#include<string.h>char*turn_left(char*arr,intnum){ intlen=strlen(arr); inti=0; //左旋数是多少就进行几次移位 for(i=0;i<num;i++) { //每次移位就是单次左旋 intj=0; chartmp=arr[0];//每次都把首元素存起来 for(j=0;j<len-1;j++) { arr[j]=arr[j+1]; } arr[len-1]=tmp;//把存起来的首元素放到最后一位 } returnarr;}intmain(){ chararr[100]={0}; intnum=0; while(1) { printf("请输入想要旋转的字符串:>"); gets(arr); printf("请输入想要左旋数:>"); scanf("%d",&num); getchar();//这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话 //下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区 printf("左旋字符串为:%s\n",turn_left(arr,num)); } return0;}
输出结果
三步翻转:
#include<stdio.h>#include<string.h>#include<assert.h>voidreverse(char*head,char*tail)//字符串逆序{ assert(head&&tail);//断言阻止空指针 chartmp=0; char*ptmp=&tmp; while(head<tail) { tmp=*head; *head=*tail; *tail=tmp; head++; tail--; } return0;}char*turn_left(char*arr,intnum){ assert(arr); intlen=strlen(arr); if(len) { intn=num%len;//防止num会越界操作,所以必须是num模len才可,还要保证len不为0 reverse(arr,&arr[n-1]);//逆序左边 reverse(&arr[n],&arr[len-1]);//逆序右边 reverse(arr,&arr[len-1]);//逆序整体 returnarr; } else { returnarr; }}intmain(){ chararr[100]={0}; intnum=0; while(1) { printf("请输入想要旋转的字符串:>"); gets(arr); printf("请输入想要左旋数:>"); scanf("%d",&num); getchar();//这个的作用是清空缓冲区,因为每次scanf会有一个\n,不清空的话 //下一次到了gets,他会认为\n是我们打进去的,所以scanf之后必须清空缓冲区 printf("左旋字符串为:%s\n",turn_left(arr,num)); } return0;}
还有3种方法但那三种就需要很强的数学功底了,具体的我也看不懂他怎么证明的数学公式,就不看了。哈哈哈
判断字符串旋转
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
题前认知
大家现在应该知道我干啥,没错我倡导交互,两个字符串都是我们写
字符串追加判断
(面试的时候能用库函数就用库函数)
什么叫字符串追加判断呢 例如asdfg这个字符串
#include<stdio.h>#include<string.h>#include<assert.h>intis_left_move(char*str1,char*str2){ assert(str1&&str2); intlen1=strlen(str1); intlen2=strlen(str2); //长度不同就肯定不是旋转字符串 if(len1-len2) return0; //在arr1字符串中追加一个自己 strncat(str1,str1,len1); //判断判断的那个字符串是不是追加字符串的子串 char*ret=strstr(str1,str2); if(ret==NULL) return0; else return1;}intmain(){ chararr1[50]={0};//有足够的空间 chararr2[50]={0}; while(1) { printf("请输入字符串:>"); gets(arr1); printf("请输入需判断的旋转字符串:>"); gets(arr2); intret=is_left_move(arr1,arr2); if(ret==1) { printf("是旋转字符串\n"); } else { printf("不是旋转字符串\n"); } } return0;}
结果
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
如何使用C语言编程C++旋转字符操作串的详细内容,希望对您有所帮助,信息来源于网络。