int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif

    while (scanf("%s", input) != EOF && input[0] != '#')
    {
        int i;
        for (i = 0; input[i] != 0; i++)
            lower_input[i] = input[i] | 0x20;
        lower_input[i] = 0;
        sort(lower_input, lower_input+i);

        m.insert(make_pair(lower_input, input));
    }

    for (mmap::iterator it = m.begin(); it != m.end(); it++)
        if (m.count(it->first) == 1)
            vec.push_back(it->second);

    sort(vec.begin(), vec.end());

    for(size_t i = 0; i < vec.size(); i++)
        puts(vec[i].c_str());

    return 0;
}
Пример #2
0
//return zero if fine.
int writeDat(char *last,mmap &mm,tary<char> *keep,tary<char> *major,tary<char> *minor,BGZF *BFP,FILE *fp,int doCompl){
  assert(last!=NULL);
  if((major!=NULL) ^ (minor!=NULL)){
    fprintf(stderr,"major and minor should be the same\n");
    return 1;
  }
  int hasMajMin =0;
  if(major!=NULL)
    hasMajMin =1;
  fprintf(stderr,"\t-> Writing chr:\'%s\' \n",last);
  mmap::iterator it=mm.find(last);
  if(it!=mm.end()){
    return 1;
  }else
    mm[strdup(last)]=1;
  //write data and index stuff
  int64_t retVal =bgzf_tell(BFP);//now contains the offset to which we should point.
  
  //write chrname
  int clen=strlen(last)+1;
  fwrite(&clen,1,sizeof(int),fp);
  fwrite(last,clen,sizeof(char),fp);
  
  fwrite(&retVal,1,sizeof(int64_t),fp);
  for(int i=0;doCompl&&i<keep->l;i++)
    if(keep->d[i]==0)
      keep->d[i]=1;
    else
      keep->d[i]=0;
  

  fwrite(&keep->l,sizeof(size_t),1,fp);//write len of chr
  fwrite(&hasMajMin,1,sizeof(int),fp);
  aio::bgzf_write(BFP,keep->d,keep->l);//write keep
  if(hasMajMin){
    aio::bgzf_write(BFP,major->d,major->l);//write maj
    aio::bgzf_write(BFP,minor->d,minor->l);//write min
  }
  return 0;
}