C++實現翻轉單詞順序_C 語言

來源:互聯網
上載者:User

題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“I am a student.”,則輸出“student. a am I”。

思路:首先將整個句子按字元翻轉,然後再將其中每個單詞的字元旋轉。

#include <string>#include "stdafx.h"void Reverse(char *pBegin, char *pEnd){  if(pBegin == NULL || pEnd == NULL)    return;    while(pBegin < pEnd)  {    char temp = *pBegin;    *pBegin = *pEnd;    *pEnd = temp;        pBegin ++, pEnd --;  }}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 ++;    }  }  return pData;}int main(){  char input[] = "I am a student.";  printf("%s\n\n",input);  printf("After reverse.\n\n");  ReverseSentence(input);  printf("%s\n", input);    return 0;}

再給大家分享一段一位國外網友的實現方法

#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; }

再來一個小編的代碼

#include <iostream> using namespace std; void reverse_part(char*,int pBegin,int pEnd); void reverse(char *str) {   //n為字串長度   int n=strlen(str)-1;   reverse_part(str,0,n);   int pBegin=0,pEnd=0;    while(str[pEnd+1]){     if(str[pEnd]!=' ' && str[pEnd]!='\0')       ++pEnd;     //找到空格     else{       reverse_part(str,pBegin,pEnd-1);       //如果下一個還是空格       while(str[pEnd+1]!='\0' && str[pEnd+1]==' ')         ++pEnd;       pBegin=++pEnd;     }   }   cout<<str<<endl; }  void reverse_part(char *str,int pBegin,int pEnd) {   char temp;   for(int i=pBegin;i<=(pEnd-pBegin)/2;++i){     temp=str[i];     str[i]=str[pEnd-i];     str[pEnd-i]=temp;   } }  void main() {   char str[]="I am a student.";   reverse(str);   system("pause"); } #include <iostream>using namespace std;void reverse_part(char*,int pBegin,int pEnd);void reverse(char *str){ //n為字串長度 int n=strlen(str)-1; reverse_part(str,0,n); int pBegin=0,pEnd=0; while(str[pEnd+1]){ if(str[pEnd]!=' ' && str[pEnd]!='\0')  ++pEnd; //找到空格 else{  reverse_part(str,pBegin,pEnd-1);  //如果下一個還是空格   while(str[pEnd+1]!='\0' && str[pEnd+1]==' ')  ++pEnd;  pBegin=++pEnd; } } cout<<str<<endl;}void reverse_part(char *str,int pBegin,int pEnd){ char temp; for(int i=pBegin;i<=(pEnd-pBegin)/2;++i){ temp=str[i]; str[i]=str[pEnd-i]; str[pEnd-i]=temp; }}void main(){ char str[]="I am a student."; reverse(str); system("pause");}

以上就是解決單詞順序翻轉的3種方法了,希望小夥伴們能夠喜歡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.