PAT_Basic.Level_1009. 说反话

PAT_Basic.Level_1009. 说反话 

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
#include<iostream>
#include<string>
#include<string.h>

#define NUMBER 80
using namespace std;

int main()
{
	string input;	//输入的字符串
	char output[40][NUMBER]={'\0'};	//存放已分割单词的数组
	int count = -1;//单词个数
	int currentWordLength = 0;//当前单词的长度
	int flag = 0;		//判断单词 1:单词 0:空格
	getline(cin,input);
	for(int i = 0; i<input.size(); i++)
	{
		if(input[i] != ' ')	//当前字符不是空格
		{
			if(flag == 1)	//表示一个单词还未结束
			{
				currentWordLength++;

				if(i == input.size()-1)	//最后一个单词
				{
					strncpy(output[count],&input[i-currentWordLength+1],currentWordLength);
				}
			}
			else if(flag == 0)//表示一个单词的开始
			{
				count++;
				currentWordLength = 1;
				flag = 1;
				if(i == input.size()-1)
				{
					strncpy(output[count],&input[i-currentWordLength+1],1);//最后一个单词只有一个字符
				}
			}
		}
		else if(input[i] == ' ')//当前字符是空格
		{
			if(flag == 1)//表示一个单词的结束
			{
				/*
					将这个单词拷贝到输出数组
					flag = 0
					currentWordLength = 0
				*/
				strncpy(output[count],&input[i-currentWordLength],currentWordLength);
				flag = 0;
				currentWordLength = 0;
			}
			else if(flag == 0)//表示仍然未遇到一个单词
			{
				//forget it!
			}
		}
	}
	//至此,单词已经分割完毕
	for(int i = count; i >= 1; i--)
	{
			cout<<output[i]<<" ";
	}
	cout<<output[0];
	return 0;
}
心得:
 char *strncpy(			//此函数需要包含的头文件<string.h>(非<string>)
     char *strDest,		//Destination string.
     const char *strSource,	//Source string.
     size_t count 		//Number of characters to be copied.
  );


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值