字符串右旋
//右移字符串方法
void printfArr(char* arr)
{
int len=strlen(arr);
int i=0;
for(i=0;i<len;i++)
{
printf("%c ",*(arr+i));
}
}//打印字符串
void reverseArr(char* arr ,int k)
{
int i=0;
int j=0;
int len=strlen(arr);
for(i=0;i<k;i++)
{
char temp;
temp=*arr;
for(j=0;j<len-1;j++)
{
*(arr+j)=*(arr+j+1);
}
*(arr+len-1)=temp;
}
}
int main()
{
char arr[]="abcdefg";
printfArr(arr);
//printf("%s\n ",arr);
reverseArr(arr ,2);
putchar('\n');
//printf("%s\n ",arr);
printfArr(arr);
}
编译结果:
abcdefg
fgabcde
字符串左旋
void printfArr(char* arr)
{
int len=strlen(arr);
int i=0;
for(i=0;i<len;i++)
{
printf("%c ",*(arr+i));
}
}
void reverseArr(char* arr ,int k)
{
int i=0;
int j=0;
int len=strlen(arr);
for(i=1;i<=k;i++)
{
char temp;
temp=*(arr+len-1);
for(j=len-1;j>0;j--)
{
*(arr+j)= *(arr+j-1);
}
*arr=temp;
}
}
int main()
{
char arr[]="abcdefg";
printfArr(arr);
//printf("%s\n ",arr);
reverseArr(arr ,2);
putchar('\n');
//printf("%s\n ",arr);
printfArr(arr);
}
编译结果:
abcdefg
cdefgab
//三步反转法
//abcdefg
//bacdefg - 1
//bagfedc - 2
//cdefgab - 3
#include<stdio.h>
#include<assert.h>
#include<string.h>
void printfArr(char* arr)
{
int len=strlen(arr);
int i=0;
for(i=0;i<len;i++)
{
printf("%c ",*(arr+i));
}
}//打印字符串
void moveArr(char* left,char* right)
{
char temp;
while(left<right)
{
temp=*left;
*left=*right;
*right=temp;
left++;
right--;
}
}
void reverseArr(char* arr ,int k)
{
int len =strlen(arr);
assert(arr!=NULL);
assert(k<len);
moveArr(arr,arr+k-1);//倒序左边
moveArr(arr+k,arr+len-1);//倒叙右边
moveArr(arr,arr+len-1);//倒叙全体
}
int main()
{
char arr[]="abcdefg";
printfArr(arr);
reverseArr(arr ,2);
putchar('\n');
printfArr(arr);
}
编译结果:
abcdefg
fgabcde
判断一个字符串是否是另一个字符串旋转之后的字符串
方法1
#include<stdio.h>
#include<assert.h>
#include<string.h>
void printfArr(char* arr)
{
int len=strlen(arr);
int i=0;
for(i=0;i<len;i++)
{
printf("%c ",*(arr+i));
}
}//打印字符串
void reverseArr(char* arr ,int k)
{
int i=0;
int j=0;
int len=strlen(arr);
for(i=0;i<k;i++)
{
char temp;
temp=*arr;
for(j=0;j<len-1;j++)
{
*(arr+j)=*(arr+j+1);
}
*(arr+len-1) =temp;
}
}
int estimateArr(char* arr1,char* arr2)
{
int len=strlen(arr1);
int ret=0;
int i=0;
assert(arr1!=NULL);
assert(arr2!=NULL);
for(i=0;i<len;i++)
{
reverseArr(arr1,1);
if(ret==strcmp(arr1,arr2))
{
return 1;
}
}
return 0;
}
int main()
{
char arr1[ ]="abcdefg";
char arr2[ ]="defgabc";
int ret=0;
ret=estimateArr(arr1,arr2);
if(ret==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}
方法2(使用库函数,strncat,strstr等)
#include<stdio.h>
#include<string.h>
int reverseArr(char* str1,char* str2)
{
char* ret=NULL;
int len1=strlen(str1);
int len2=strlen(str2);
if(len1!=len2)
{
return 0;
}
strncat(str1,str1,len1);
ret=strstr(str1,str2);
if(ret==NULL)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int ret=0;
char arr1[30]="abcdefg";
char arr2[ ]="abcdefgggg";
ret=reverseArr(arr1,arr2);
if(ret==1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
在杨氏矩阵中查找数字
#include<stdio.h>
int findNum(int arr[ ][3],int* n,int* m,int k)
{
int x=0;
int y=*m-1;
while(x<=*n-1 && y>=0 )
{
if(arr[x][y]>k)
{
y--;
}
else if(arr[x][y]<k)
{
x++;
}
else
{
*n=x;
*m=y;
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int ret=0;
int n=3;
int m=3;
int k;
printf("请输入你想查找的数\n");
scanf("%d",&k);
ret=findNum(arr,&n,&m,k);
if(ret==1)
{
printf("找到了\n");
printf("在%d行%d列\n",n,m);
}
else
{
printf("没找到\n");
}
return 0;
}