左旋转字符串
1.暴力法,需要注意对数组操作使用了指针,而不是下标访问。
char* MoveLeft(char * arry, int k)
{
int len = strlen(arry);
for (int i = 0; i < k; i++)
{
char cur = *arry;
for (int j = 0; j < len; j++)
{
*(arry+j) = *(arry+j + 1);
}
*(arry+len-1) = cur;
}
return arry;
}
void printarry(char *arry)
{
int len = strlen(arry);
for (int i = 0; i < len; i++)
{
cout << arry[i] << " ";
}
cout << endl ;
}
int main()
{
char ar[] = { 'a', 'b', 'c', 'd', 'e', 'f' ,'\0'};
char arry[] = "abcdef";
MoveLeft(arry, 2);
MoveLeft(ar, 2);
printarry(arry);
printarry(ar);
system("pause");
return 0;
}
2.三次翻转法,注意翻转边界的选择
void reverse(char* left,char* right)
{
assert(left != nullptr);
assert(right!= nullptr);
while (left<right)
{
char cur = *left;
*left = *right;
*right = cur;
left++;
right--;
}
}
char* MoveLeft(char * arry,int k)
{
int len = strlen(arry);
reverse(arry, arry + k-1);
reverse(arry + k, arry + len - 1);
reverse(arry, arry + len - 1);
return arry;
}
int main()
{
char arry[] = "abcdef";
MoveLeft(arry, 2);
cout << arry << endl;
system("pause");
return 0;
}