句子逆序

输入:I  am  a  good  boy!

1、仅仅句反

   输出:boy!  good  a  am  I

int main(){
    string str;
    stack<string> s;
    while(cin>>str)
    {
        s.push(str);
    }
    while(s.size()!=1)
    {
        cout<<s.top()<<" ";
        s.pop();
    }
    cout<<s.top()<<endl;
    return 0;
}

2、句反词也反

 输出:!yob  doog  a  ma  I

#include<iostream> 
using namespace std;
 int main()
 {   
    string str;   
    getline(cin,str);         //用while(cin>>str)只通过50% 
  
    for(int i=str.size(); i>=0; i--)   //reverse(str.begin(), str.end()); 也可以
      cout<<str[i];
  }

3、仅仅词反

输出:I  ma  a  doog  !yob

#include<stdio.h> 
#include<iostream> 
#include<string.h>
#include <stdlib.h>
using namespace std;
void reverseWord(char *start, char *end)  
{   
    char temp;
    while(start < end)  
    {  
        temp=*start ;  
        *start = *end;  
        *end = temp; 
        *start++;
        *end--; 
    }  
}
  
int main( ) 
{  
   char str[80];
   gets(str);                  
    
   char *p=str;
   char *q=str;
   while(*q != '\0')
    {
        if(' ' == *q)            //单词结尾:q首次遇到空格(此时将单词头地址p,和单词尾地址q-1) 
        {
              reverseWord(p,q-1); 
        
              while(' ' == *q )    //单词开头:q 跳若干空格后下一单词首字符 
              { 
                   q++;
              }
              p=q;              //单词头地址赋值给p 
        }
        else
        {
             q++;               //单词内部地址自加 
        }
        
   }
   reverseWord(p,q-1);          //将最后一个单词逆序 
  
   cout<<str;  
    
    return 0;  
}  

  

第一,给定单词的首地址和尾地址,将其倒序(也就是交换功能)

第二,将一个句子拆分为每个单词:

        单词尾地址根据指针q遇到(连续空格的)第一个空格判定:q-1

           单词首地址根据指针q遇到的不再是空格判定

posted @ 2018-06-26 22:00  道微真理  阅读(106)  评论(0)    收藏  举报