例如 ABCDEFG 这样一个字符串 ,左旋3个字符,结果:DEFGABC
方法:
逆置ABC 结果:CBADEFG
再逆置 DEF结果:CBAGFED
最后整体逆置 结果:DEFGABC
代码实现:
void inversion_str(char* string, int start, int end)//逆置函数
{
for (int i = 0; i < (((end-start)+1)/2); i++)
{
string[start + i] = string[end - i] + string[start + i];
string[end - i] = string[start + i] - string[end - i];
string[start + i] = string[start + i] - string[end - i];
}
}
void Sinistral_k(char* string, int k)//左旋函数
{
int str_lenth = strlen(string);
inversion_str(string, 0, k - 1);
inversion_str(string, k, str_lenth - 1);
inversion_str(string, 0, str_lenth - 1);
}
测试结果:
全部代码:
#include<stdio.h>
#include<string.h>
void inversion_str(char* string, int start, int end)//逆置函数
{
for (int i = 0; i < (((end-start)+1)/2); i++)
{
string[start + i] = string[end - i] + string[start + i];
string[end - i] = string[start + i] - string[end - i];
string[start + i] = string[start + i] - string[end - i];
}
}
void Sinistral_k(char* string, int k)//左旋函数
{
int str_lenth = strlen(string);
inversion_str(string, 0, k - 1);
inversion_str(string, k, str_lenth - 1);
inversion_str(string, 0, str_lenth - 1);
}
int main()
{
char str[] ="ABCDEFG";
printf("%s\n", str);
Sinistral_k(str, 3);
printf("%s\n", str);
}