左旋右旋问题的解决
编程思想
- 1.在左右旋函数中实现该函数功能首先要想好如何存放移位后的字符元素
- 2.左旋时将字符串首元素赋给临时变量tmp而后将字符串元素依次前移一位
- 3.将tmp的值再赋给字符串的最后一个元素,实现左旋。右旋函数大体相同。
- 4.合理运用循环,使得函数功能得以全部实现。
题目要求:实现一个函数,可以左/右旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
AABCD右旋一个字符得到DAABC
#include<stdio.h>
void menu( )
{ //打印菜单,供操作人员选择。
printf("************************\n");
printf("*********1.左旋*********\n");
printf("*********2.右旋*********\n");
printf("*********0.退出*********\n");
printf("************************\n");
}
void LeftSlue(char arr[ ],int sz)
{ //左旋字数串函数
int i;
int k=0;
printf("请输入要左旋的字符数:");
scanf("%d",&k);
k=k%sz; //防止输入的k值超过字符串的长度
while(k--)
{
char tmp=arr[0];
for(i=0;i<sz;i++)
{
arr[i]=arr[i+1];
}
arr[sz-1]=tmp;
}
}
void RightSule(char arr[],int sz )
{ //右旋字符串函数
int i;
int k=0;
printf("请输入要右旋的字符数:");
scanf("%d",&k);
k=k%sz; //防止输入的k值超过字符串的长度
while(k--)
{
char tmp=arr[sz-1];
for(i=sz-1;i>=0;i--)
{
arr[i]=arr[i-1];
}
arr[0]=tmp;
}
}
void print(char arr[ ],int sz)
{ //打印函数 ,打印字符串。
int i=0;
printf("-------------------\n");
for(i=0;i<sz;i++)
{
printf("%c ",arr[i]);
}
printf("\n");
printf("-------------------\n");
}
int main()
{
int input=0;
do
{
char arr[6]="abcdef"; //定义字符串,并进行初始化。
int sz=sizeof(arr)/sizeof(arr[0]); //计算字符串长度
menu( );
scanf("%d",&input);
switch(input)
{
case 1:
LeftSlue(arr,sz);
print(arr,sz);
break;
case 2:
RightSule(arr,sz);
print(arr,sz);
break;
case 0:
break;
default:
printf("输入错误!\n");
break;
}
}while(input);
return 0;
}
【 总结】
个人觉得在开始写代码前在自己的脑子里应该先有函数的大体框架。不能边敲代码边想函数的功能,如果边敲代码边想的话容易出现大量的错误和警告而且会没有明确的解决思想。出现大量的错误再去改正的话会浪费更多的时间。