将student a am i”转换为“i am a student”
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<ctype.h>
void reverse(char *begin, char *end)
{
assert(begin);//断言判断指针是否为空
assert(end);
while (begin < end)
{
*begin ^= *end;//将一个单词逆置
*end ^= *begin;
*begin ^= *end;
begin++, end--;
}
}
int main()
{
char meg[] = "student a am i";//第一步先将每个单词逆置,为tneduts a ma i
char *p = meg;//,p指向字符串的首地址
char *q = p;
while (*q != '\0')
{
if (isspace(*q))
{
reverse(p, q-1);//q指向每个单词后面的空格处,所以需要减一
p = q + 1;
}
q++;
}
reverse(p, q-1);//之前最后一个单词没有逆置,所以需要把最后一个单词逆置
reverse(meg, meg + strlen(meg)-1);//把整体倒置
printf("res : %s\n",meg);
system("pause");
return 0;
}