题目:有一个字符串数组“abcdef”,现要求用编程方法使得字符串为“cdefab”。
基本思维1:先定义一个字符串数组char arr[],再定义一个旋转函数left_move,将此字符串首位取出,其余各位依次向前移一位,两次循环即可。
a b c d e f
b c d e f a
c d e f a b
assert宏的原型定义在<assert.h>中,其作用为如果它的条件返回值错误,则终止程序执行。
基本思维2:三步翻转法
? ? ? ? ? ? ? ? ? ? ab? ? cdef
? ? ? ? ? ? ? ? ? ? ba? ? fedc
? ? ? ? ? ? ? ? ? ? c d e f?a b? ? (交换)
经过上面三次对称交换,即可达目的。
#include<stdio.h>
#include<string.h>
#include<assert.h>
void left_move(char* arr,int k)
{
assert(arr);
int len=strlen(arr);
int i=0;
for(i=0;i<k;i++){
char temp=*arr;
j=0;
for(j=0;j<len-1;j++){
*(arr+j)=*(arr+j+1);
}
*(arr+len-1)=temp;
}
main(){
char arr[]="abcdef";
left_move(arr,2);
printf("%s",arr);
}
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* left,char* right)
{
assert(left!=NULL);
assert(right!=NULL);
while(left<right){
char temp=0;
temp=*left;
*left=*right;
*right=temp;
left++;
right--;
}
}
void left_move(char* arr,int k)
{
assert(arr);
int len=strlen(arr);
assert(k<=len);
reverse(arr,arr+k-1);
reverse(arr+k,arr+len-1);
reverse(arr,arr+len-1);
}
main(){
char arr[]="abcdef";
left_move(arr,2);
printf("%s",arr);
}
|