判断计算机的大、小端存储方式
1 int main() 2 { 3 int a=1; 4 char* p=(char*)&a; 5 if(*p==1) 6 printf("little ");//小端存储:高位存在地地址, 地位存在高地址 7 if(*p==0) 8 printf("big ");//大端存储:高位存在高地址,地位存在地地址 9 return 0; 10 }
实现一个函数,可以左旋字符串中的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[10]="aabcd"; int len=strlen(arr)-1; int k=0; char* pstart=&arr[0]; char* pend=&arr[len]; scanf("%d",&k); reverse(pstart,pstart+k-1);//if k=3,第一次函数调用结束 baacd reverse(pstart+k,pend); //if k=3,第二次函数调用结束 baadc reverse(pstart,pend); printf("%s ",arr); return 0; }
判断一个字符串是否为另外一个字符串旋转之后的字符串
#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[10]="aabcd"; int len=strlen(arr)-1; int k=0; int i=0; char arr1[10]={0}; char* pstart=&arr[0]; char* pend=&arr[len]; gets(arr1); for(i=0;i<len;i++) { reverse(pstart,pstart+k-1); reverse(pstart+k,pend); reverse(pstart,pend); if(strcmp(arr1,arr)) { printf("yes ");//arr1是arr旋转得到的 break; } } if(i>=len) printf("no "); return 0; }