2017-12-24 test14

1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
void revolve( char arr[],int n,int sz)
{
	int i = 0;
	int j = 0;
	for (i = 0;i < n;i++)
	{
		arr[sz+i] = arr[i];
	}
		for (j = i ;j <= sz+i ;j++)
		{
			arr[j-i] = arr[j];
		}
	
}
int main() 
{
//实现一个函数,可以左旋字符串中的k个字符。
//		ABCD左旋一个字符得到BCDA
//		ABCD左旋两个字符得到CDAB
	char arr[50] = "abcd";
	int sz = strlen(arr);
	int n = 0;
	printf("请输入你要左旋字符的长度:\n");
	scanf("%d", &n);
	revolve(arr,n,sz);
	for (n = 0;n < sz;n++)
	{
		printf("%c", arr[n]);
	}
	system("pause");
	return 0;
}

2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

#define _CRT_SECURE_NO_WARNINGS  
  
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
//len可不由参数传递,可在Left函数内求得  
//void Left(char c[], int len, int k)//方法1  
//{  
//      k = k%len;//对于5个字符的字符串,左旋3次和左旋8次结果一样  
//  int j = 0;  
//  for (j=0; j<k; j++)  
//  {  
//      int i = 0;  
//      char tmp = c[0];  
//      for (i=0; i<len-1; i++)  
//      {  
//          c[i] = c[i+1];  
//      }  
//      c[i] = tmp;  
//  }  
//}  
  
  
//void Reverse(char *start, char *end)  
//{  
//  while (start<end)  
//  {  
//      *start ^= *end;  
//      *end ^= *start;  
//      *start ^= *end;  
//      start++;  
//      end--;  
//  }  
//}  
//  
//void Left(char c[], int len , int k)  
//{  
//  k = k%len;  
//  Reverse(c, c+k-1);  
//  Reverse(c+k, c+len-1);  
//  Reverse(c, c+len-1);  
//}  
  
  
void Left(char c[], int len , int k)  
{  
    k = k%len;  
    char *p = (char *)malloc((2*len+1)*sizeof(char));  
    strcpy(p, c);  
    strcat(p, c);  
    strncpy(c, p+k, len);  
    free(p);  
}  
  
int main()  
{  
    char c[] = "ABCDE";  
    int k = 2;  
    int len = strlen(c);  
    printf("左旋前:%s\n", c);  
    Left(c,len,k);  
    printf("左旋后:%s\n", c);  
    return 0;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值