. 说反话-加强版 (20)(12fen 部分对)

来源:互联网 发布:出国英文翻译软件 编辑:程序博客网 时间:2024/05/21 21:26

字符串-07. 说反话-加强版 (20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越(浙江大学)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World   Here I Come
输出样例:
Come I Here World Hello



#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <stdlib.h>#include <vector>#include <string>using namespace std;void reverse(char p[],long begin,long end){  //char ch[50] = { 0 };  char temp;  //for (long i = begin; i <= end; i++)  //{  //  ch[i] = p[i];  //}  for (int i = 0; i <= (end - begin) / 2; i++)  {    temp = p[i+begin];    p[i + begin] = p[end - i];    p[end  - i] = temp;  }}int main(){  char str[500000] = {0};  long length;  long begin = 0, end = -1;  long num1 = 0,num2=0;  //char c;  long num = 0;  while (cin.getline(str,500000))  {    for (long i = 0; i<500000; i++)    {      if (str[i]=='\0')      {        length = i ;        break;      }      }    //求长度    for (long i = 0; i <=length; i++)    {      if (str[i] != ' '&& end>begin &&str[i] != '\0')      {        begin = i;        //reverse(str, begin, end);      }      else if ((str[i] == ' ' && end <= begin) )      {        end = i;        reverse(str, begin, end);      }       else if (str[i] == '\0' && end<begin)      {        end = i;        reverse(str, begin, end);        break;      }      else      {        continue;      }    }    reverse(str, 0,length);    for (long i = 0; i < length; i++)    {        if (str[i] != ' '&&str[i] != '\0')      {        cout << str[i];        num1++;      }      else      {        if (str[i + 1] == '\0'&&num1!=0)        {          break;        }        if (str[i+1]!=' '&&num1!=0&&(i+1<length))        {          cout << ' ';        }      }          }      }}

0 0
原创粉丝点击