何海涛算法面试题感悟之七:翻转句…

      题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。
为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。

        这道题目算法并不是很难,但是却考察了程序员的基本素养即字符串的操作,如何用最基本的类型(字符类型)来操作一个字符串。 算法的思想是先把句子中所有的字符都颠倒,然后再将句子中每个单词的字符颠倒

char *reverse(char* pBegin,char* pEnd){
if(pBegin == NULL||pEnd==NULL) return NULL;
while(pBegin<pEnd){
  char temp = *pBegin;
    *pBegin = *pEnd;
    *pEnd    = *pBegin;
    pBegin ++;
    pEnd --;
}
return pBegin;
  }

char * ReverseSentence(char *pData){
if(pData == NULL) return NULL;
char* pBeigin = pData;
char* pEnd = pData;
while(pEnd!=='\0')
pEnd++;
pEnd--;
reverse(pBegin,pEnd);//首先反转整个句子
pBegin=PEnd=pData;
while(*pEnd!='\0'){
 if(*pBegin==' '){//找到每一个单词的开始字符
   pBegin++;
   pEnd++;
   continue;
 }else if(*pEnd==' '||*pEnd=='\0'){//对于每一个单词的字符进行反转
  reverse(pBegin,--pEnd);
  pBegin = ++pEnd;
 }else{
         //找到每一个单词的结束字符
  pEnd++;
 }
return pData;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值