要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
想法:
首先我们将整个字符串进行逆置,接下来在对每个单词进行逆置。
这里需要两个指针,首指针和尾指针来确定一个区域,对其区域里面的进行逆置。
这里值得注意的是:最后一次跳出while循环时,对最后一个单词没有进行逆置。
我们来看看代码:
void reverse(char *start, char *end)
{
assert(start);
assert(end);
while (start < end)
{
*start ^= *end;
*end ^= *start;
*start ^= *end;
start++, end--;
}
}
void reversestring(char *mag)
{
assert(mag);
char *p = mag;
char *q = mag;
while (*q){
if (isspace(*q))
{
reverse(p, q - 1);
q++;
p = q;
}
q++;
}
reverse(p, q - 1);
reverse(mag, q - 1);
}
int main()
{
char mag[] = "student a am i";
reversestring(mag);
printf("%s\n", mag);
system("pause");
return 0;
}
运行结果: