将英文句子中单词的顺序反转, 单词中字符的顺序不变
如: 将 "live and learn!" 反转为 "!learn and live"
考虑:
1.将整个句子中所有字符反转: "!nrael dna evil"
2.将句中单词逐个反转: "!learn and live" (以非字符和数字为分界)
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
//反转字符串start~end的字符顺序
char* strrev(char* start, char* end)
{
if(start>=end)
return NULL;
char* ret = start;
char ch;
while(start<end)
{
ch = *start;
*start++ = *end;
*end-- = ch;
}
return ret;
}
//反转句子中单词顺序
char* strRevWord(char* str)
{
if(str==NULL)
return NULL;
char* ret = str;
int nlen = strlen(str);
//反转整个字符串
strrev(str,str+nlen-1);
char* start = str;
while(*str)
{
//查找字符分隔
while(*str && (isalpha(*str) || isdigit(*str)))
str++;
//反转单词
if(start<str)
strrev(start,str-1);
//跳过非字符和数字
while(*str && !isalpha(*str) && !isdigit(*str))
str++;
start = str;
}
return ret;
}
int main(int argc, _TCHAR* argv[])
{
char str[] = "live and learn!!!";
strRevWord(str);
printf("%s/n", str);
system("Pause");
return 0;
}