<编程之法>1.1 字符串旋转

来源:互联网 发布:浙江大学王灿数据挖掘 编辑:程序博客网 时间:2024/06/06 19:13

题目:

给定一个字符串,左旋转m个字符,输出旋转后的字符串。

例如  “abcdef” 左旋转3个字符后成为 “defabc”


解决办法:三步反转

将“abcdef”看成两部分  X=“abc”  Y=“def”  先对X反转,再对Y反转,然后整体反转。

代码:

void reverseString(char *s, int bg, int ed){while (bg < ed){char tmp = s[bg];s[bg++] = s[ed];s[ed--] = tmp;}}

void leftLotateString(char *s, int n, int m){reverseString(s, 0, m - 1);reverseString(s, m, n - 1);reverseString(s, 0, n - 1);}


单词翻转:

输入一个英文句子,将句子中的单词翻转。例如: 输入“I am a student.”   输出 “student. a am I”


解决办法:先将每个单词反转,然后将整个句子反转。

void reverseWord(char *s){char *bg = s, *ed=s,*p = s;while (*p != '\0'){if (*p == ' '){ed = p - 1;while (bg < ed){char t = *bg;*bg++ = *ed;*ed-- = t;}bg = p + 1;}++p;}ed = p - 1;while (bg < ed){char t = *bg;*bg++ = *ed;*ed-- = t;}reverseString(s, 0, strlen(s)-1);}



原创粉丝点击