14-句子逆序

1- Description

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
接口说明
/**
*反转句子
*@param sentence 原句子
*@return 反转后的句子
*/
public String reverse(String sentence);

输入描述
将一个英文语句以单词为单位逆序排放。
输出描述
得到逆序的句子

示例1
输入:
I am a boy
输出:
boy a am I

2- Solution

  • 注意是句子逆序输出,不是字符串直接反转输出!
  • getline(cin,strin)带空格输入字符串,并且反序输出
#include <iostream>
#include <string>
using namespace std;
int main(){
    string strin;
    while(getline(cin,strin)){
        for(int i = strin.length() - 1; i >= 0 ; --i){
            cout <<strin[i];
        }
    }
}
  • 这里需要注意的就是要等着while循环把所有的字符串输入进来。再进行剩下的输出操作
#include <iostream>
#include <string>
#include <vector> 
using namespace std;

int main(){
    string strin;
    vector<string> strvec;
    while(cin >> strin){
        strvec.push_back(strin);//字符串输入
    }
    for(int i = strvec.size() - 1; i >= 0 ; --i){
        cout <<strvec[i];
        if(i > 0){
            cout << " ";
        }
    }
}

欢迎关注公众号:CodeLab

二、实验内容 根据LL(1)语法分析算法的基本思想,设计一个对给定文法进行LL(1)语法分析的程序,并用C、C++、Java或Python 语言(选择其中一种语言)编程实现。要求程序能够对从键盘输入的任意字符串进行分析处理,判断出该输入串是否是给定文法的正确句子,并针对该串给出具体的LL(1)语法分析过程。 三、实验要求 对给定文法G[S]: S→AT A→BU T→>+AT|$ U→*BU|$ B→(S)|m 其中,$表示空串。完成如下任务: (1)*手工判断上述文法G[S]是否LL(1)文法?若不是,将其转变为LL(1)文法。 (2)*针对转变后的LL(1)文法,手工建立LL(1)预测分析表。 (3)根据教材《编译技术原理及方法》教材上LL(1)分析的算法思想及算法流程图,构造LL(1)分析程序。 (4)用LL(1)分析程序对任意键盘输入串进行语法分析,并根据栈的状态变化输出给定串的具体分析过程。 四、运行结果示例 (1)任意从键盘输入是文法句子的字符串,例如: m+m*m# 则以表12-2中形式输出字符串的分析过程,并输出"由上述分析过程可知,该串是文法的合法句子"的结论。 表12-1 输入串m+m* m#的LL(1)分析过程 步骤 分析栈 当前输入串 推导所用产生式或匹配情况 1 #S m+m*m# S→AT 2 #TA m+m*m# A→BU 3 #TUB m+m*m# B→m 4 #TUm m+m*m# m匹配 5 #TU +m*m# U→$ 6 #T +m*m# T→+AT 7 #TA+ +m*m# +匹配 8 #TA m*m# A→BU 9 #TUB m*m# B→m 10 #TUm m*m# m匹配 11 #TU *m# U→>*BU 12 #TUB* *m# *匹配 13 #TUB m# B→m 14 #TUm m# m匹配 15 #TU # U→$ 16 #T # T→$ 17 # # 接受 (2)任意从键盘输入不是文法句子的字符串,例如: mm *+m# 则以表12-2中形式输出字符串的分析过程,并输出"由上述分析过程可知,该串不是文法的合法句子”的结论。 表12-2 输入串 mm*+m#的 LL(1)分析过程 步骤 分析栈 当前输入串 推导所用产生式或匹配情况 1 #S mm*+m# S→AT 2 #TA mm*+m# A→BU 3
04-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值