算法100题26
2011-09-19 00:16 justvi 阅读(845) 评论(2) 编辑 收藏 举报/* 题目来自:http://blog.csdn.net/v_JULY_v
* 题26:定义字符串的左旋转操作:把字符串前面若干个字符移动到字符串的尾部。
* 如abcdef左旋转2位得到cdefab。
* 方法:(可见《编程珠玑》) AB->BA: f(f(A)f(B)) = BA,f表示将字符串逆置
* (补充)说明:将AB转换成BA,可将A逆置得到Ar,再将B逆置得到Br,再将整体ArBr逆置得到BA。
* 如abcdef左旋2位,首先将ab逆置得到ba,再将cdef逆置得到fedc,再将整体bafedc逆置得到cdefab。
*/
1 #include <stdio.h>
2
3 void f(char *s, int l, int u)
4 {
5 char t;
6 while (l < u)
7 {
8 t = s[l];
9 s[l] = s[u];
10 s[u] = t;
11 l++, u--;
12 }
13 }
14
15 void func(char *s, int n, int m)
16 {
17 m = m % n;
18 f(s, 0, m-1);
19 f(s, m, n-1);
20 f(s, 0, n-1);
21 }
22
23 int main()
24 {
25 char s[] = "abcdef";
26 func(s, 6, 8);
27 printf("%s\n", s);
28 return 0;
29 }
可得到:cdefab
作者:justvi
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利
出处:http://www.cnblogs.com/justvi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章正文中给出原文连接,否则保留追究法律责任的权利