一.读取完倒着打印就行了:
#include <stdio.h>
#include <string.h>
#include<iostream>
using namespace std;
int main() {
char str[81];
cin.getline(str,81);
for (int i = strlen(str); i > 0; i--) {
if (str[i] == ' ') {
printf("%s ", &str[i + 1]);
str[i] = '\0'; //\0表示结束符,后续字符串将在次中断
}
}
printf("%s", &str[0]);
return 0;
}
二.用辅助间存储 利用栈后进先出的特性倒着输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
stack<string> a;// 定义一个栈 存字符串
string temp;
while(cin>>temp)// 将输入的字符串一字符串的形式存到栈中
a.push(temp);// 压栈
bool flog = false;
while(!a.empty())
{
if(flog)
cout<<" ";
cout<<a.top();
a.pop();
flog = true;
}
return 0;
}
三.翻转 先局部再整体 先整体再局部都可以
#include <iostream>
#include<cstring>
using namespace std;
void reverse(char str[], int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char str[81];
cin.getline(str,81 );
int len = strlen(str) - 1; // 计算字符串长度,不包括最后的换行符
reverse(str, 0, len - 1); // 翻转整个字符串
int start = 0;
for (int end = 0; end < len; end++) {
if (str[end] == ' ') {
reverse(str, start, end - 1);
start = end + 1;
}
}
reverse(str, start, len - 1);
while (len > 0 && (str[len-1] == ' ' || str[len-1] == '\n')) {
len--;
}
// 输出结果
cout << str << endl;
return 0;
}
四.利用迭代器从后往前输出
用strinfstream配合getline()可以忽略空格,只读取每个单词:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;getline(cin,s);
stringstream ss(s);
vector<string>v;
string words;
while(ss>>words)
{
v.push_back(words);
}
for (int i = v.size() - 1; i >= 0; i--) {
if (i != v.size() - 1) cout << " ";
cout << v[i];
}
// vector<string>::reverse_iterator it = v.rbegin();
// for (; it != v.rend(); it++)
// {
// cout << *it;
// if (it != v.rend() - 1)cout << " ";
// }
return 0;
}