当前位置:编程学习 > C/C++ >>

翻转单词顺序

JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入:
每个测试案例为一行,表示一句英文句子。
我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。
输出:
对应每个测试案例,把翻转后的正确的句子单独输出一行。
样例输入:
student. a am I
I'm a Freshman and I like JOBDU!
样例输出:
I am a student.
JOBDU! like I and Freshman a I'm
思想:举个例子大家就知道了!例如:输入   123 456 789
                    我们先将每个字串翻转 321 654 987
                            再将整体翻转 789 456 123  OK,效果达到!
其实最后一次的翻转都不需要了,直接从后往前输出字符就ok!
代码AC:
[cpp]  
#include <stdio.h>  
#include <string.h>  
  
int main()  
{  
    char str[50001], ch;  
    int i, low, high, tmp, len;  
      
    while( gets( str ) )  
    {  
           low = 0;  
           high = 0;  
           len = strlen( str );  
             
           while( low < len )  
           {  
                  while( str[low] == ' ' )  
                  {  
                         low++;  
                  }  
                    
                  high = low;  
                    
                  while( str[high] )  
                  {  
                         if( str[high] == ' ' )  
                         {  
                             high--;  
                             break;  
                         }  
                         else  
                         {  
                             high++;  
                         }  
                  }  
                    
                  if( str[high] == '\0' )  
                  {  
                      high--;  
                  }  
  
                  tmp = high + 1;  
                    
                  while( low < high )  
                  {  
                        ch = str[low];  
                        str[low] = str[high];  
                        str[high] = ch;  
                        low++;  
                        high--;  
                  }  
                    
                  low = tmp;  
                  high = tmp;  
           }  
             
           for( i = len - 1; i > 0; i-- )  
           {  
                printf("%c", str[i]);  
           }  
           printf("%c\n", str[0]);  
    }  
      
    return 0;  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,