例如 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#include 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("%sn", str); Sinistral_k(str, 3); printf("%sn", str); }


![[C语言]左旋k个字符串(不需要创建临时变量,不越界) [C语言]左旋k个字符串(不需要创建临时变量,不越界)](http://www.mshxw.com/aiimages/31/982714.png)
