判断计算机的大、小端存储方式
1 int main()
{
int a=;
char* p=(char*)&a;
if(*p==)
printf("little\n");//小端存储:高位存在地地址, 地位存在高地址
if(*p==)
printf("big\n");//大端存储:高位存在高地址,地位存在地地址
return ;
}
实现一个函数,可以左旋字符串中的k个字符。
AABCD左旋一个字符得到ABCDA
AABC
D左旋两个字符得到BCDAA
#include<string.h>
void reverse(char* left,char* right)
{
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
int main()
{
char arr[]="aabcd";
int len=strlen(arr)-;
int k=;
char* pstart=&arr[];
char* pend=&arr[len];
scanf("%d",&k);
reverse(pstart,pstart+k-);//if k=3,第一次函数调用结束 baacd
reverse(pstart+k,pend); //if k=3,第二次函数调用结束 baadc
reverse(pstart,pend);
printf("%s\n",arr);
return ;
}
判断一个字符串是否为另外一个字符串旋转之后的字符串
#include<string.h>
void reverse(char* left,char* right)
{
while(left<right)
{
char tmp=*left;
*left=*right;
*right=tmp;
left++;
right--;
}
}
int main()
{
char arr[]="aabcd";
int len=strlen(arr)-;
int k=;
int i=;
char arr1[]={};
char* pstart=&arr[];
char* pend=&arr[len];
gets(arr1);
for(i=;i<len;i++)
{
reverse(pstart,pstart+k-);
reverse(pstart+k,pend);
reverse(pstart,pend);
if(strcmp(arr1,arr))
{
printf("yes\n");//arr1是arr旋转得到的
break;
}
}
if(i>=len)
printf("no\n");
return ;
}