嘘~ 正在从服务器偷取页面 . . .

CCF命令行选项---初识sstream和getline()


CCF-201403-3

通过这个题目我认识一下sstream和getline()

下面都不会了

让我们看看题目怎么说

1

解题思路

1.首先我们要把第一行的字母提取出来,分辨出每个字母是带参的还是不带参的,可以使用两个vector,两个set,我们这里使用的是一个map,set在这里原则上会好于vector,因为set有find函数,这样查找的时候会方便,不多说,此题我们使用了map来存贮字母,1表示带参,0表示不带参
2.每一行的输入要使用到getline,然后把getline里面的string提取出来,我们使用到了sstream中的stringstream。
需要注意的是:在getline()前要先读入一个空格,我们使用getchar()或者cin.ignore()都可以,这里我们使用了后者
3.由于输入的字母需要排序,所以我们用set来存贮输出的结果
在每次输入前,查询的map-m,和存储的set-ans和输入输出流ss都需要clear()
4.失分点:如果带参的字母后面参数为空,那么这个参数报错,需要break;
5.失分点:ss.str(str) 不能用ss<<str代替,不然只能拿10分。

代码是这样的

#include<iostream>
#include<cstring>
#include<sstream>
#include<map>
#include<set>
using namespace std;
int main(){
    stringstream ss;
    map<char,int> symbol;
    map<string,string> m;
    set<string> ans;
    string str;
    cin>>str;
    for(int i=0;i<str.length();i++){
      if(str[i+1]==':'){
          symbol[str[i]]=1;
          i++;
      }else{
          symbol[str[i]]=0;
      }
    }
    int n;
    cin>>n;
    cin.ignore();
    for(int i=1;i<=n;i++){
      string temp;
      getline(cin,str);
      m.clear();
      ans.clear();
      ss.clear();
      ss.str(str);
      ss>>temp;
      while(ss>>temp){
          if(temp[0]=='-'){
            if(symbol.find(temp[1])!=symbol.end()){    
                if(symbol[temp[1]]==1){
                  string temp2;
                  ss>>temp2;
                  if(temp2.empty()) break;
                  m[temp]=temp2; 
                }
                ans.insert(temp);
            }
            else break;
          }
          else break;   
      }
      cout<<"Case "<<i<<": ";
      for(set<string>::iterator it=ans.begin();it!=ans.end();it++){
           cout<<*it<<" ";
           if(m.find(*it)!=m.end()){
            cout<<m[*it]<<" ";
           }
      }
      cout<<endl;
    } 
    return 0;
}

过了哟

STL-set的API

set-API


版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梦想成为假面骑士的司祎同学 !
赏
评论
评论
 上一篇
CCF回收站选址---map与结构体的结合使用+复习STL-map CCF回收站选址---map与结构体的结合使用+复习STL-map
CCF-201912-2今天就这个题目来复习一下STL-map 别看图了,看看题目怎么说吧! 解题思路看到题目,最先想到的就是简单的bfs,其实我挺喜欢这种搜索的题,仔细点就能做出来,我们可以开一个大大的满足数据范围的二维数组,全部置零,然
2020-09-03
下一篇 
C++中的小数位数控制和有效数字控制 C++中的小数位数控制和有效数字控制
C++中的小数位数控制和有效数字控制 首先来看看C++小数位数控制CCF-201903-1 小中大 代码中认识如何控制小数位数—外加algorithm函数sort()#include<iostream> #include<iom
2020-09-03
  目录