实现一句话以单词为单位的逆转输出

终于独立实现了一个一般难度的题目  记录一下

#include <iostream>
#include <Windows.h>
#include <string>

using namespace std;

int main(void) {
	string str;
	int i;
	int j;
	int k1,k2;
	char tmp;
	cout << "请输入字符串" << endl;

	getline(cin,str);
	i = 0;
	j = str.length() - 1;
	//cout << str.length() << endl;
	while (i < j) {   //这段程序实现的是整体逆转  比如123 456->654 321
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
		i++;
		j--;
	}
	i = 0;
	while (i < str.length()) {//取用数组下标的时候,下标需要小与长度一个
		while (str[i] == ' '&& i < str.length()) i++;//跳过空格 i<长度  是防止越界
		k1 = i;  //这个while结束条件是 str[i]不是空格,而是单词的第一个字符
		while (str[i] != ' '&& i < str.length()) i++;
		k2 = i - 1;
        //i-1的原因是 最后一次执行while时str[i]代表最后单词的最后一个字母 然后i进行了自增
        //这个时候str[i]已经走到了空格的位置,我们想实现的是单词逆转,故而需要让str[i]回到最后一个字母,所以减去1
		for (; k1 < k2; k1++, k2--) {//单纯的逆转 很简单
			tmp = str[k1];
			str[k1] = str[k2];
			str[k2] = tmp;
		}

	}
	


	cout << str << endl;
	
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值