代码(c++版本)
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int main(){
vector<string> v;
string s;
getline(cin, s);
int start = 0;
int end = 0;
for(int i=0; i<s.length(); i++){
if(s.at(i)==' '){
end = i-1;
v.push_back(s.substr(start, end-start+1));
start = i+1;
}
}
v.push_back(s.substr(start, s.length()-start+1));
cout<<v.at(v.size()-1);
for(int i=v.size()-2; i>=0; i--){
cout<<" "<<v.at(i);
}
cout<<endl;
return 0;
}
注解
(1)按行读取:
string s;
getline(cin, s);
(2)vector的使用:
头文件和声明:
#include <vector>
vector<string> v;
插入:
v.push_back(s.substr(start, end-start+1));
查找:
cout<<v.at(i);
求容量:
v.size()
(3)string取子串的方法:
s.substr(start, length)
@param start 起始索引
@param length 要取的子串长度
(4)整体思路
读取一行文本,从头到尾遍历,找到空格,就意味着前面是一个单词,加入vector。直到文件末尾,再把最后一个单词加入到vector。
缺点:只能处理正常格式文本,如遇到多个空格,或不规范格式,可能无法正确处理。
代码(java版本)
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s = sc.nextLine();
StringTokenizer st = new StringTokenizer(s);
Stack<String> stack = new Stack<String>();
while(st.hasMoreTokens()){
stack.push(st.nextToken());
}
while(stack.size()>1){
System.out.print(stack.pop() + " ");
}
System.out.println(stack.pop());
}
}
}
注解
(1)采用StringTokenizer分词
利用hasMoreTokens()方法查找是否有下一个单词,如果有,利用nextToken()方法输出。
import java.util.StringTokenizer;
StringTokenizer st = new StringTokenizer(s);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
(2)利用栈实现逆序输出
import java.util.Stack;
stack.push(st.nextToken());
while(stack.size()>1){
System.out.print(stack.pop() + " ");
}
System.out.println(stack.pop());