<实例>C++ 将一句话里的单词进行倒置,标点符号不倒换——使用string库实现

#include <iostream>
#include <string>
using namespace std;

string reverse(string sentence)
{
	string::iterator begin = sentence.begin();
	string::iterator end = sentence.end();
	char tmp;
	while( begin < end )
	{
		tmp = *begin;
		*begin = *(end-1);
		*(end-1) = tmp;
		begin++;
		end--;
	}

	string::size_type num = sentence.size();
	string::size_type i = 0;
	string::size_type begin_tmp;
	string::size_type end_tmp;
	while( i < num )                               //只能用字符串下标判断
	{
		if(sentence[i] != ' ')
		{
			begin_tmp = i;
			while(sentence[i] != ' ')
			{
				i++;
				if(i>=num)            //防止下标越界
				{
					break;
				}
			}
			i = i-1;
			end_tmp = i;
		}

		while(begin_tmp<end_tmp)
		{
			tmp = sentence[begin_tmp];
			sentence[begin_tmp] = sentence[end_tmp];
			sentence[end_tmp] = tmp;
			begin_tmp++;
			end_tmp--;
		}
		i++;
	}
	return sentence;
}

void main()
{
	string sentence ;
	getline(cin, sentence);
	sentence = reverse(sentence);
	cout<<sentence<<endl;
}

注意:虽然string库提供迭代器 string::iterator end = sentence.end() ,可以很方便的定位到字符串最后一个字符之后,但是迭代器end无法进行*end操作(出现*end就会报错)也就无法用*end = NULL来进行边界条件判断,只能依靠下标值来进行判断。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值