题目

题目地址:PAT 乙级 1033

题解

本题一直有一分的样例点过不了,原因在于用了cin接收输入的字符……

问题在于:如果用cin输入,无法接收无坏键的情况的输入,需要getline作为输入;这就涉及到cin和getline的不同,这一部分我看到一篇博文写得很好,就直接粘过来,先贴出原博文的地址:https://www.cnblogs.com/YTYMblog/p/5930692.html

cin>>这个表达式应该分为两部分来看:cin 和>>

其中cin仅仅是一个istream对象!!!它的值反映的是当前输入流的状态:即cin对象接下来能否进行输入操作(能否从cin对象中读取数据)

cin对象实际上面向两方面的功能:

    1.外部设备与cin之间:这部分对于程序员来说是透明的

      设备(键盘)对它的修改,即通过设备直接修改cin对象,通过这个可以直接修改cin对象的状态(能否从cin对象中读取数据)

    2.cin和内存(各种对象,变量)之间:

      将cin中的数据读取出来,并赋予各种对象,变量

    而这两方面的功能都不由cin对象完成,cin对象实际上只是一个状态数据量,1功能有外设(键盘)完成,2功能由<<和getline等等运算符完成

................................................

有了上面的对cin对象全方面的了解,接下来对>>运算符的分析就手到擒来了

    >>运算符的作用实际上就是从cin对象中读取数据,并将数据赋予给右侧的各种对象或者变量,也就是上述的第2部分的功能了

     那么>>运算符有哪些特性呢?毕竟输入输出总得控制开始和结束吧

      1.>>运算符是由右侧的数据类型定义的,右侧的数据类型不同,重载的>>也不同

      2.>>运算符是向左结合的

      3.>>运算符从cin对象中读取数据时:如果遇到空格或者换行符号,那么这次读取数据结束,将空格之前的数据赋给右侧的运算对象,相应的,读取的第一个符号,也是空格或者换行符之后的第一个有效数据

      4.一个>>运算符一次只能读取一次(一个)数据,要想读取多个数据,只能再加>>运算符

......................................................................


好吧,以上4个,就是>>的性质了,那么有些人又要问了,那么Ctrl+Z(~Z)文件结束符号又是怎么一回事呢?

其实这个文件结束符和>>完全就是风马牛不相干,有些人总是将Ctrl+z和>>联系在一起

      文件结束符号:就是cin对象功能一中的一个性质!也就是说,你可以把文件结束符看成是外设的功能:

      一旦从外设中遇到文件结束符(或者是无效的输入),cin对象的状态就会变为假!!,也就是说外设多不能向cin对象写值了!!!

      自然<<运算符号就无效了

......................................................................

getline

    1.它是String对象定义的,只能string对象用(当然<<也是String对象重载的)

    2.getline遇到空格不结束!!!也就是说它可以从cin对象中读取空格!!当然,遇到换行仍然结束,但是他也会读取换行符,但是读取换行符之后后停止读取,然后将读取的数据(此时包括换行符)赋给右侧的运算对象(x,见下),赋值的时候,丢弃换行符!!!,也就是说换行符不存到x中

getline的返回值是流参数和cin>>表达式一样,返回cin>>

    3.getline是一个函数的形式:

    调用如下:

  string x;

  getline(cin ,x);返回值为cin的状态

代码

 #include <iostream>
#include <string>
using namespace std; int vis_loc(char c) {
int loc = ;
if (c >= 'a' && c <= 'z')
loc = c - ;
else if (c >= 'A' && c <= 'Z')
loc = c - ;
else if (c >= '' && c <= '')
loc = c + ;
else if (c == '_')
loc = ;
else if (c == ',')
loc = ;
else if (c == '.')
loc = ;
else if (c == '-')
loc = ;
else if (c == '+')
loc = ;
return loc;
} int vis_word(char c) {
int loc = ;
if (c >= 'a' && c <= 'z')
loc = c - + ;
else if (c >= 'A' && c <= 'Z')
loc = c - - ;
return loc;
} int main() {
bool vis[] = { false };
string injure;
string instr;
getline(cin, injure);
getline(cin, instr);
for (int i = ; i < injure.size(); i++) {
if (injure[i] == '+') {
vis[] = true;
for (int j = ; j < ; j++)
vis[j] = true;
}
else {
if (injure[i] >= 'a' && injure[i] <= 'z')
vis[vis_word(injure[i])] = true;
else if (injure[i] >= 'A' && injure[i] <= 'Z')
vis[vis_word(injure[i])] = true;
vis[vis_loc(injure[i])] = true;
}
}
for (int i = ; i < instr.size(); i++) {
if (!vis[vis_loc(instr[i])])
cout << instr[i];
}
cout << endl; return ;
}

PAT 乙级 1033的更多相关文章

  1. PAT乙级 1033. 旧键盘打字(20)

    1033. 旧键盘打字(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 旧键盘上坏了几个键,于是在敲一段文 ...

  2. PAT乙级1033

    1033 旧键盘打字 (20 分)   旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 ...

  3. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  4. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  5. PAT甲级1033. To Fill or Not to Fill

    PAT甲级1033. To Fill or Not to Fill 题意: 有了高速公路,从杭州到任何其他城市开车很容易.但由于一辆汽车的坦克容量有限,我们不得不在不时地找到加油站.不同的加油站可能会 ...

  6. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  7. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  8. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

  9. PAT 乙级 1003

    题目 题目地址:PAT 乙级 1003 题解 规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意:总之这道题要考虑的东西更多,细节上也要特别注意: 规律:“如果 aPbTc 是 ...

随机推荐

  1. [Xcode 实际操作]九、实用进阶-(9)陀螺仪设备的使用

    目录:[Swift]Xcode实际操作 本文将演示陀螺仪设备的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //导入需要用到的C ...

  2. Java相关书籍阅读

  3. gns3 拖出设备显示一个红色的s,无法启动虚拟设备

    通过view-docks-调出console窗口,显示错误信息: Error while creating project: Can't connect to server http://172.0. ...

  4. redis 的操作

    redis Redis(Remote Dictionary Server)是一个开源使用的非关系型数据库 通常被称为数据结构服务器,因为值可以是字符串,哈希,列表,集合,有序集合 优势 ​ 性能极高, ...

  5. Codeforces 1143B(思维、技巧)

    自己水平太低,不丢人. 结论是最后选取的数后缀一定是若干个9,暴举即可.然而暴举也有暴举的艺术. ll n; ll dfs(ll n) { if (n == 0) return 1; if (n &l ...

  6. morphia(6-1)-查询

    1.filter morphia语法: query.filter("price >=", 1000); mongodb语法: { price: { $gte: 1000 } ...

  7. nodejs 学习(2) 中间件

    var connect=require('connect'), morgan=require('morgan'),//日志 bodyparser=require('body-parser'), ses ...

  8. wireshark工具集

    tshark 查看pcap文件第一个包的时间,当文件名不包含时间信息时非常有帮助 tshark -c 1 -T fields -e frame.time -r test.pcap dumpcap ed ...

  9. Help with Intervals(集合的交并补,线段树)

    很早以前做过这题,早就没印象了,估计当时也是照着某大神的代码抄过的,现在是连题意都看了好长时间. 刚开始的S集合是空集,给你一些操作和一个T集合,把操作的结果再赋给S集合. 解法:因为会有开区间和闭区 ...

  10. 【转】阐述Handler的实现原理

    面试题:阐述Handler的实现原理 2016年07月18日 21:01:35 阅读数:7574 处理过程: 从handler中获取一个消息对象,把数据封装到消息对象中,通过handler的send… ...