每日一题2:反转英文句子

反转英文句子的意思是将句子中按顺序排好的单词的顺序颠倒过来,例子如下:
输入: wo shi zhong guo ren
输出: ren guo zhong shi wo
直观的解法是先将每个单词提取出来,然后计算每个单词反转后所的位置,最后将单词填到相应的位置上。这种方案不仅占用辅助空间,并且计算复杂。另一种方案是将整个句子看做一个字符串,先反转字符串字母的顺序(包含空格),然后再一次反转每个单词的字母顺序。反转单词字母的意思是:
输入:wo shi zhong guo ren
输出:ner oug gnohz ihs ow
下面看第二种思路的代码:

#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <vector>


using namespace std;

void ReverseString(char str[],int start,int end)
{
    for (int i = start,j = end; i < j; ++i,--j)
    {
        char c = str[i];
        str[i] = str[j];
        str[j] = c;
    }
}

void ReverseString(char str[])
{
    int length = strlen(str);
    ReverseString(str,0,length - 1);
}

void ReverseSentence(char str[])
{
    ReverseString(str);
    vector<int> splitIndex;
    int length = strlen(str);
    //记录下单词分隔符的位置(空格),句首放置一个虚拟空格
    splitIndex.push_back(-1);
    for (int i = 0; i < length; ++i)
    {
        if(str[i] == ' ')
            splitIndex.push_back(i);
    }
    //句尾放置一个虚拟空格
    splitIndex.push_back(length);
    int count = splitIndex.size() - 1;
    for (int i = 0; i < count; ++i)
    {
        ReverseString(str,splitIndex[i] + 1,splitIndex[i+1] - 1);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    char str[] = "wo shi zhong guo ren";
    cout<<str<<endl;
    ReverseSentence(str);
    cout<<str<<endl;
    return 0;
}

程序运行截图:
这里写图片描述
该程序只考虑英文字母输入,并且不考虑标点符号,所有单词以空格分开。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值