输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。

例如输入“I am a student”,则通过控制台输出“student a am I”
代码实现如下:

# include<iostream>
# include<string>
using namespace std;
//思路:用指针指向字符串儿转成的数组,利用指针拿出数组中的元素,放入一个二维数组。
//利用双层循环,可得到题目要求的结果
//备注:用getline(cin , s)方法,可输入带空格的字符串儿。s.c_str():可将字符串儿转成数组。
int main() {

	string s;
	cout<<"请输入一个英文句子,单词之间用空格隔开"<<endl;
	//getline(cin , s)可以读入有空格的字符串儿
	getline(cin , s);
	string s1 = " ";
	string s2 = "\0";
	//用三个同类型指针指向字符串儿(字符串是const类型,且最小单位空间为char)
	const char * p = s.c_str();
	const char * p1 = s1.c_str();
	const char * p2 = s2.c_str();
    char arr[20][20];
	//备注:因为我用的是vc6编译器(比较低级),所以要把用到的变量全部声明在前面,所以有些乱。有的编译器可随用随声明
	//游标索引
	int i = 0;
	//根游标索引
	int j = 0;
	//空格出现次数,也是放入数组的次数(外层数组个数)
	int m = 0;
	//内层数组个数
	int n = 0;
	//遍历数组时用到的,外层索引和内层索引
	int i1;
	int j1;
	//用来存放每个内层数组里有多少个元素
	int num[20];
	
	//通过双层循环将字符串儿元素,装入二维数组
	for (i ; i < s.length() ; i++) {
		if(p[i] == *p1) {
			//通过内层循环,子串装入字符串儿数组元素内
			for(j ; j < i ; j++) {
				arr[m][n] = p[j];
				n = n + 1;
			}
			//退一步
			n = n - 1;
			//第m个一层元素里有n个二层元素
			num[m] = n;
			//装入只后,刷新根游标索引值
			j = i + 1;
			//刷新一层元素索引
			m = m + 1;
			//刷新二层元素索引
			n = 0;
		}else if (i == s.length() - 1) {
			for(j ; j <= i ; j++) {
				arr[m][n] = p[j];
				n = n + 1;
			}
		}
	}
	//刷新二层元素索引
	n = n - 1;
	//第m个一层元素里有n个二层元素
	num[m] = n;


	
	//将二维数组里面的元素,逆着第一层元素索引顺着第二层元素索引输出
	for (i1 = m ; i1 > - 1 ; i1--) {
		for (j1 = 0 ; j1 <= num[i1] ; j1++) {
			cout<<arr[i1][j1];
		}
		cout<<" ";
	}
	cout<<endl;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值