输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。
例如输入“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;
}