现在的位置: 首页 > 综合 > 正文

翻转单词顺序

2013年10月27日 ⁄ 综合 ⁄ 共 1103字 ⁄ 字号 评论关闭

题目:输入一英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,为简单起见标点符号和普通字母一样处理。例如输入字符"I am
a student." 则输出"student. a am I"

 第一步:翻转真个句子中所有的字符

 二步:逐个翻转每个单词中字符的顺序

翻转任意一段字符串的代码如下:

void Reverse(char* begin,char* end)
{
    while(begin<end)
    {
        char temp = *begin;
        *begin = *end;
        *end = temp;  //直接交换的是字符串中的内容
        begin++;
        end--;
    }   //注意交换的这里
}

在英语中,单词被空格所分隔,因此我们可以通过扫描空格来确定每个单词的起始和终止位置,翻转的每个阶段,begin始终指向单词的第一字符,而end始终指向最后一个字符。

完整代码如下:

#include<iostream>
using namespace std;
void Reverse(char* begin,char* end);
char* Stence(char* pstring);
int main()
{
    char array[20]={'I',' ','a','m',' ','a','s',' ','s'};
    char* point=array;
    while(*point!='\0')
        cout<<*(point++);
    cout<<endl;
    point=Stence(array);
    while(*point!='\0')
        cout<<*(point++); 
    return 0;
}
void Reverse(char* begin,char* end)
{
    while(begin<end)
    {
        char temp = *begin;
        *begin = *end;
        *end = temp;  //直接交换的是字符串中的内容
        begin++;
        end--;
    }   //注意交换的这里
}
char* Stence(char* pstring)
{
    if(pstring==NULL)
        return NULL;
    char* pbegin=pstring;
    char* pend= pstring;
    while(*pend!='\0')
        pend++;
    pend--;
    Reverse(pbegin,pend);//翻转整个句子
    
    pbegin=pend=pstring;
    while(*pbegin!='\0')       //逐个翻转单词
    {
       if(*pbegin==' ')
       {
           pend++;
           pbegin++;
       }
       else if(*pend==' '||*pend=='\0')  
       {
           Reverse(pbegin,--pend);
           pbegin=++pend;
       }
       else
            pend++;
    }
    return pstring;
}

抱歉!评论已关闭.