例如:输入“i come from tianjin”,输出“tianjin. from come i”
step1:翻转所有字母的顺序,变成“.nijnait morf emoc i”
step2:翻转单词,以空格为界,输出正确答案
java代码:
//最新的。翻转句子。通过测试。by myself //I am a student. --> student. a am I public class ReverseSentence{ public static void main(String[] args){ String s="zhangxueyuan am student"; System.out.println(s); System.out.println(reverseSentence(s)); } public static void reverse(char c[], int start, int end){ while(start<end){ char temp = c[start]; c[start] = c[end]; c[end] = temp; start++; end--; } } public static char[] reverseSentence(String s){ char c[]=s.toCharArray(); reverse(c, 0, c.length-1);//c[c.length-1]!='\0' int start = 0; int end = 0; while(end<=c.length-1){ if(c[start]==' '){ start++; end=start; }else if(c[end]==' '){ reverse(c, start, end-1); end++; start=end; }else{ end++; } } //注意最后一个单词后面可能没有空格!所以需要下面一句来处理 if(start!=end&&start<end-1){ reverse(c, start, end-1); } return c; } }
c代码:
#include <iostream> #include <stdio.h> using namespace std; void reverse(char *pBegin, char *pEnd) //翻转字符串 { if(pBegin==NULL||pEnd==NULL) { return; } char temp; while(pBegin<pEnd) { temp=*pBegin; *pBegin=*pEnd; *pEnd=temp; pBegin++; pEnd--; } }//reverse char* reverseSentence(char *pData) { if(pData==NULL) { return NULL; } char *pBegin=pData; char *pEnd=pData; while((*pEnd)!='\0') { pEnd++; } pEnd--; reverse(pBegin,pEnd);//翻转所有 pBegin=pEnd=pData; /* //翻转每个单词法一(书中) while(*pBegin!='\0') { if(*pBegin==' ') { pBegin++; pEnd++; } else if(*pEnd==' '||*pEnd=='\0') { reverse(pBegin,--pEnd); pBegin=++pEnd; } else { pEnd++; } } */ //翻转每个单词法二(自己写的) while((*pEnd)!='\0') { if(*pEnd==' ') { pBegin=++pEnd; } else { while((*pEnd)!=' '&&(*pEnd)!='\0') { pEnd++; } reverse(pBegin,pEnd-1); } } return pData; }//reverseSentence int main(){ char s[]="i come from tianjin"; cout<<s<<endl; char *p=reverseSentence(s); cout<<p<<endl; }