加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用C语言实现字符串左旋和右旋问题

发布时间:2020-12-15 04:56:10 所属栏目:百科 来源:网络整理
导读:1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 1.暴力移位法 #include #include #include void left_move(char*str,int k) { int len = 0; int i = 0; while (k--) { //1.把第一个保存起来 char tmp = *s

1.实现一个函数,可以左旋字符串中的k个字符。

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

1.暴力移位法

#include

#include

#include

void left_move(char*str,int k)

{

int len = 0;

int i = 0;

while (k--)

{

//1.把第一个保存起来

char tmp = *str;

//2.后面的向后移动

len = strlen(str);

for (i = 0; i < len; i++)

{

*(str + i) = *(str + 1 + i);

}

//3.把保存的数据放在最后一位

*(str + len - 1) = tmp;

}

}

int main()

{

char arr[] = "ABCD";

int n = 0;

printf("请输入左旋位数:");

scanf_s("%d",&n);

left_move(arr,n);

printf("%s ",arr);

system("pause");

return 0;

}

2.三步翻转法

#include

#include

#include

#include

void reverse(char *left,char* right)

{

assert(left&&right);//断言

while (left < right)

{

char tmp = *left;

*left = *right;

*right = tmp;

left++;

right--;

}

}

void left_move(char*str,int k)

{

int len = strlen(str);

reverse(str,str + k - 1);//逆序前半部分

reverse(str+k,str + len - 1);//逆序后半部分

reverse(str,str+ len - 1);//逆序整个字符串

}

int main()

{

char arr[] = "ABCD";

int n = 0;

printf("请输入左旋位数:");

scanf_s("%d",arr);

system("pause");

return 0;

}

2.实现一个函数,可以右旋字符串中的k个字符。

ABCD右旋一个字符得到DABC

ABCD右旋两个字符得到CDAB

1.暴力移位法


#include

#include

#include

void right_move(char* p,int k)

{

int len = strlen(p);

for (int i = 0; i < k; ++i)//控制旋转次数

{

char tmp = p[len - 1];

for (int j = len - 1; j > 0; --j)//完成一次旋转

{

p[j] = p[j - 1];

}

p[0] = tmp;

}

}

int main()

{

char arr[] = "ABCD";

int n = 0;

printf("请输入右旋位数:");

scanf_s("%d",&n);

right_move(arr,arr);

system("pause");

return 0;

}

2.三步翻转法:先把字符串整体逆序,然后分别是前半部分逆序和后半部分逆序或者

先是后半部分逆序,接下来是前半部分逆序,最后再整体逆序都可以

具体代码如下:

#include

#include

#include

#include

void reverse(char *left,char* right)

{

assert(left&&right);//断言

while (left < right)

{

char tmp = *left;

*left = *right;

*right = tmp;

left++;

right--;

}

}

void right_move(char*str,str + len-k -1);//逆序前半部分

reverse(str+len-k,str + len - 1);//逆序后半部分

reverse( str,str + len - 1);//逆序整个字符串

reverse(str,str + len - 1);//逆序后半部分

}

int main()

{

char arr[] = "ABCDEFG";

int n = 0;

printf("请输入右旋位数:");

scanf_s("%d",arr);

system("pause");

return 0;

}

总结

以上所述是小编给大家介绍的使用C语言实现字符串左旋和右旋问题。编程之家 52php.cn 收集整理的教程希望能对你有所帮助,如果觉得编程之家不错,可分享给好友!感谢支持。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读