反转字符数组中的单词,如“This is a test”,反转后“test a is This”
【问 题】将一个字符数组中的单词顺序反转,要求不借助其它字符数组或者指针链表,保存反转后的字符数组,单词间以空格分隔。
【思路】先将字符数组全部反转,“This is a test”--> “tset a si sihT”, 再将单词逐个反转,最后得到要求的数组。
int main(int argc, char* argv[])
{
char str[]= " This is a test ";
char* pstart, *p;
int flag = 1;
printf("before rev: %s\n ", str);
rev(str, str+sizeof(str)-2); /* 全部反转*/
printf("frist rev: %s \n", str);
for(p=pstart=str; ;p++)
{
if ((*p==' ')||(*p==0)) /*调整每个单词*/
{
if (flag)
{
flag = 0;
rev(pstart, p-1);
printf("rev word : %s\n
", str);
pstart = p;
}
if (*p==0) /* 结尾*/
break;
}
else if (flag==0)
{
pstart = p;
flag =1;
}
}
printf("after rev: %s\n
", str);
return 0;
}
void rev(char* pstart, char* pend) /*反转一个字符串*/
{
while(pend>pstart)
{
*pend^=*pstart; /*交换数据内容 */
*pstart^=*pend;
*pend^=*pstart;
++pstart;
--pend;
}
}