C++: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

该博客介绍了一种C++方法,用于输入英文句子并保持单词内字符顺序不变的情况下,翻转句子中单词的顺序。

题目:

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。

解题思路:

方法一:
先用空格将句子分割成单个单词并按顺序存储,然后将这些单词进行反转

方法二:

先将整个句子反转,然后再单词内部进行反转

具体实现:

方法一:
基本思想:先用空格将句子分割成单个单词并按顺序存储,然后将这些单词进行反转
*/

string reverseString(string str,int size)
{
	bool flag = false;                             //当前不是字母,即在单词外
	int index = -1;                                //标志每个单词的开始位置
	string tmp[100];                               //用一个字符串数组将根据空格分隔得到的每个单词保存起来
	string sub = "";                               //用于存储将分割后的单词反向连接后得到的结果
	int count = 0;                                 //用于统计分割得到的单词数
	
	for (int i = 0; i < size; i++)
	{
		if (str[i] != ' ')
		{
			if (flag == false)                                   
			{
				index = i;                       
				flag = true;
			}
			if (i == size - 1)                          //由于最后一个单词后面没有空格,所以得特殊处理
			{
				tmp[count++] = str.substr(index, i - index+1);
			}
			continue;
		}
		else if(flag == true)
		{
			tmp[count++] = str.substr(index, i - index);
			flag = false;
		}
		
	}

	
	for (int i = count-1; i >= 0; i--)
	{
		sub += (tmp[i]+' ');
	}

	return sub;
}

/*
方法二:
基本思想:先将整个句子反转,然后再单词内部进行反转
*/

void reverse(string &str,int start, int end)
{
	char tmp = ' ';
	int i = start;
	int j = end;

	for (; i < j; i++,j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
	//return str;
}
void reverseSentence(string &str)
{
	int size = str.size();
	
	reverse(str, 0, size - 1);

	int flag = false;
	int index = 0;
	
	for (int i = 0; i < size; i++)
	{
		if (str[i] != ' ')                         //进单词
		{
			if (flag == false)
			{
				flag = true;
				index = i;                        //用index标记一个单词的开始位
			}
			if(i == size-1)                       //用于处理最后一个单词(因为最后一个单词不是以空格结束,所以需要通过下标识别它的结束位)
			{
				reverse(str, index, i);           
			}
			continue;
		}
		else if (flag == true)                      //出单词
		{
			flag = false;
			reverse(str, index, i-1);             //此时的i标记的是一个单词的结束位
		}
	}
}


int main()
{
	string str = "i am a teacher";
	string rstr = "";
	int size = str.size();

	cout << "__________________ " << endl << endl;

	cout <<"方法一"<< endl;
	rstr = reverseString(str,size);
	cout << rstr << endl;

	cout << "__________________ "<< endl<<endl;

	cout << "方法二" << endl;
	reverseSentence(str);
	cout << str << endl;

	cout << "__________________ " << endl << endl;
system("pause");
	return 0;

运行结果:


本资源文件提供了基于Simulink的风电调频仿真模型,涵盖了双馈风机调频、VSG虚拟同步机控制、风电场调频等多个关键技术。仿真模型基于三机九节点系统,包含了虚拟惯性控制和下垂控制,适用于研究风电渗透率较高(20%)的电力系统调频问题。主要功能双馈风机调频:模拟双馈风机的调频特性,研究其在电力系统中的动态响应。VSG虚拟同步机控制:采用虚拟同步机控制策略,模拟风电机组的同步机特性。风电场调频:研究风电场在电力系统中的调频能力,评估其对系统频率稳定性的影响。三机九节点系统:基于经典的三机九节点系统模型,适用于电力系统仿真研究。虚拟惯性控制:引入虚拟惯性控制策略,增强风电机组的惯性响应能力。下垂控制:采用下垂控制策略,实现风电机组的频率调节功能。同步机调频:模拟火电机组和水轮机的调频特性,研究不同类型同步机在系统中的调频作用。仿真特点风电渗透率20%:仿真模型考虑了20%的风电渗透率,更贴近实际电力系统运行情况。Phasor模型:采用Phasor模型进行仿真,计算速度快,仿真时间仅需20秒。火电机组和水轮机调频:模型中包含火电机组和水轮机,可分别研究其调频特性。适用场景本资源适用于电力系统研究人员、工程师以及相关专业的学生,用于研究风电调频、虚拟同步机控制、电力系统稳定性分析等课题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值