题目:
给定一个字符串,左旋转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);
}