字符串中单词的逆转

题目描述:将一个字符串中的单词进行逆转,请注意区分单词的逆转和字符串的逆转。‘

例:已知字符串为“I Love China!”,进行单词的逆转后为“China! Love I”。

思路:先对整个字符串进行逆转,之后再对每个单词进行逆转。

#include <iostream>
using namespace std;
void Reverse(char* a, char* b)
{
    if (a == NULL || b == NULL)
	return;
    while (a < b)
    {
	char temp = *a;
	*a = *b;
	*b = temp;
	a++, b--;
    }
}
char* ReverseSentence(char* str)
{
    if (str == NULL)
    {
	return NULL;
    }
    char* begin = str;
    char* end = str;
    while (*end != '\0')
    {
	end++;
    }
    end--;				
    Reverse(begin, end);		//反转整个字符串
    begin = end = str;
    while (*begin != '\0')
    {
	if (*begin == ' ')
	{
	    begin++;
	    end++;
	    continue;
	}
	//反转单词
	else if (*end == ' ' || *end == '\0')
	{
	    Reverse(begin, --end);
	    begin = ++end;
	}
	else
	    end++;
    }
    return str;
}
int main()
{
    char s[100];
    gets(s);
    cout << ReverseSentence(s) << endl;
    return 0;
}

 此外,还有一种方法,即直接调用reverse()函数。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
    string str;
    getline(cin,str);
    reverse(str.begin(), str.end());		//第一步,逆转整体,从begin开始到end前一个
    int i = 0, begin = 0;
    for (i = 0; i <= str.size(); i++)    //如果第一个单词有很多个字母,那么如果不写<=的话会导致第一个单词在其内部被逆转,即如果第一个单词是She,而且还没有写<=,那么该单词就会以ehS的形式输出
    {
	if ((str[i] == ' ' || str[i] == '\0') && begin < i)		//遇到空格或结束符,同时判断begin小于i,就是存在可逆转的单词
        {
	    reverse(str.begin() + begin, str.begin() + i);
	    begin = i + 1;
        }
    }
    cout << str << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值