PAT-乙-1009 1009 说反话 (20 分)

在这里插入图片描述

代码(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());

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhanggirlzhangboy/article/details/82798751
今日推荐