BUPT Strings calculate

BUPT的新生赛,做着玩玩!

Strings calculateSubmit: 409   Accepted:116Time Limit: 1000MS  Memory Limit: 65536K

Description
heimengnan最近学习了字符串。他想到整数和浮点数可以做加、减、乘等的运算,那么字符串之间是不是也能做运算呢?

给定字符串s1与s2 有如下的三种运算
+,-, *

s1与s2运算后的结果字符串中的字符要按照字典顺序(abcdef…z这个顺序就是字典序)重新排列后输出。s1和s2可能不以字典顺序给出,s1,与s2中只会出现a,b,c,d,…,z这26个字符。

+(加) 运算:
将s1与s2 中出现的字符相加。即把在s1与s2中的同一字符的个数的和作为结果字符串中该字符的个数。
(如果a在s1中出现1次,在s2中出现10次,那么a会在结果字符串中出现11次,b在s1中出现5次,在s2中未出现,那么b在结果字符串中出现5次。)
例如:
aabbddeaacdemk + kkbmsaa 的结果为 aaaaaabbbcdddeekkkmms

-(减) 运算:
将s1与s2中出现的字符相减。即把在s1与s2中的同一字符的个数的差的绝对值作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 1次,那么a会在结果字符串中出现2次。如果b在s1中未出现,在s2中出现2次,那么b会在结果字符串中出现2次。)
例如:
aabbddeaacdemk – kkbmsaa 的结果为 aabcdddeeks

* (乘) 运算:
将s1与s2中出现的字符相乘,即把在s1与s2中的同一字符的个数的积作为结果字符串中该字符的个数。
(如果a在s1中出现3次,在s2中出现 7次,那么a会在结果字符串中出现21次。如果b在s1中未出现,在s2中出现100次,那么b会在结果字符串中也不会出现即0次。)
例如:
aabbddeaacdemk * kkbmsaa 的结果为 aaaaaaaabbkkm



Input
首先是一个整数t 代表测试数据的组数,然后是 t组运算式,每组运算式有三个部分:
s1 运算符 s2
s1,运算符,s2三个部分会用两个空格分隔,s1与s2中只可能出现a,b,c,d,e,…,z 26个小写字母。
s1,s2的长度小于1000,结果字符串的长度不会超过1000000。


Output
结果字符串,其中的字符按照字典书序排列,如果结果是空字符串,那么直接输出空行。

Sample Input

3
aabbddeaacdemk + kkbmsaa
aabbddeaacdemk - kkbmsaa
aabbddeaacdemk * kkbmsaa


Sample Output

aaaaaabbbcdddeekkkmms
aabcdddeeks
aaaaaaaabbkkm


Hint
建议使用scanf(“%s”,s);读入字符串

Source
heimengnan

 

 

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
char s1[1001],s2[1001],fuhao;
bool cmp(char a,char b)
{
 return a<b;
}
int main()
{
 int n,i,j,l1,l2,num1,num2,count1,count2;
 freopen("in.txt","r",stdin);
 freopen("out.txt","w",stdout);
 scanf("%d",&n);
 while(n--)
 {
  scanf("%s ",s1);
  scanf("%c",&fuhao);
  scanf("%s ",s2);
  l1=strlen(s1);l2=strlen(s2);
  sort(s1,s1+l1,cmp);
  sort(s2,s2+l2,cmp);
  if(fuhao=='+')
  {
   num1=0;num2=0;
   for(i=1;i<=26;i++)
   {
    count1=0;count2=0;
    while(s1[num1]<='a'+i-1&&num1<l1)
    {
     num1++;
     if(s1[num1]=='a'+i-1);
                 count1++;
    }
    while(s2[num2]<='a'+i-1&&num2<l2)
    {
     num2++;
     if(s2[num2]=='a'+i-1);
                 count2++;
    }
    for(j=1;j<=count1+count2;j++)
              printf("%c",'a'+i-1);
   }
   printf("/n");
  }
  else
  if(fuhao=='-')
  {
   num1=0;num2=0;
   for(i=1;i<=26;i++)
   {
    count1=0;count2=0;
    while(s1[num1]<='a'+i-1&&num1<l1)
    {
     num1++;
     if(s1[num1]=='a'+i-1);
                 count1++;
    }
    while(s2[num2]<='a'+i-1&&num2<l2)
    {
     num2++;
     if(s2[num2]=='a'+i-1);
                 count2++;
    }
    int cha;
    if(count1-count2>0) cha=count1-count2;
           else  cha=count2-count1;
    for(j=1;j<=cha;j++)
              printf("%c",'a'+i-1);
   }
   printf("/n");
  }
  else
  if(fuhao=='*')
  {
   num1=0;num2=0;
   for(i=1;i<=26;i++)
   {
    count1=0;count2=0;
    while(s1[num1]<='a'+i-1&&num1<l1)
    {
     num1++;
     if(s1[num1]=='a'+i-1);
                 count1++;
    }
    while(s2[num2]<='a'+i-1&&num2<l2)
    {
     num2++;
     if(s2[num2]=='a'+i-1);
                 count2++;
    }
    for(j=1;j<=count1*count2;j++)
              printf("%c",'a'+i-1);
   }
   printf("/n");
  }
 }
 return 0;
}

你可能感兴趣的:(c,测试,input,output)