复习数据结构和算法02-反转句子中的单词的顺序(单词中字符顺序不变)

将英文句子中单词的顺序反转, 单词中字符的顺序不变

如: 将  "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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值