1. 程式人生 > >#工具:格式化隨機數據發生

#工具:格式化隨機數據發生

time print define bits lock spa 換行符 rep fin

支持單區間隨機數輸出、同區間隨機數重復輸出、普通數據直接輸出、一組數據重復輸出、修改輸出文件、隨機字符串輸出

  • [a,b]輸出區間[a,b]內的隨機數。
  • [a,b]*n輸出n個區間[a,b]內的隨機數。
  • [a,b]*[na,nb]輸出n個區間[a,b]內的隨機數。n是區間[na,nb]內的隨機數。
  • <c1,c2>輸出一個ASCII碼在字符c1和c2(包含c1和c2)的字符。
  • <c1,c2>*n輸出n個ASCII碼在字符c1和c2(包含c1和c2)的字符,即長為n的字符串。
  • <c1,c2>*[na,nb]輸出n個ASCII碼在字符c1和c2(包含c1和c2)的字符,即長為n的字符串。n是區間[na,nb]內的隨機數。
  • {...}*n將花括號內的命令重復執行n次。*n可以省略,表示執行一次。{}*n必須與其他命令用空白字符隔開。
  • {...}*[na,nb]將花括號內的命令重復執行n次。{}*[na,nb]必須與其他命令用空白字符隔開。n是區間[na,nb]內的隨機數。
  • xxx.txt將輸出文件重定向為xxx.txt(默認輸出文件為".\Input.txt")。重定向為同一文件相當於把文件清空。
  • EOF表示命令的終止
  • 不符合以上格式的輸入被視作普通數據,不做處理直接輸出
  • 以上命令都應兩兩用空白字符隔開
  • 除同區間隨機數重復輸出會在一行內輸出數據外,其他操作的輸出都以換行符隔開
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define ms(arr,a) memset(arr,a,sizeof arr)
#define debug(x) cout<<"< "#x" = "<<x<<" >"<<endl
const int maxn=1e2+5;
char s[maxn][maxn];
int sum;
void solve(int l,int r,int times)
{
    while(times--)
    {
        for(int i=l;i<=r;i++)
        {
            if(strstr(s[i],".txt")){freopen(s[i],"w",stdout);continue;}
            if(s[i][0]==‘{‘)
            {
                int lft=i,cnt=1;
                while(cnt)
                {
                    i++;
                    if(s[i][0]==‘{‘)cnt++;
                    else if(s[i][0]==‘}‘)cnt--;
                }
                int t=1;
                int nl,nr;
                if(strlen(s[i])>1)
                {
                    if(s[i][2]==‘[‘)
                    {
                        sscanf(s[i],"}*[%d,%d]",&nl,&nr);
                        t=rand()%(nr-nl+1)+nl;
                    }
                    else sscanf(s[i],"}*%d",&t);
                }
                solve(lft+1,i-1,t);
                continue;
            }
            if(s[i][0]==‘[‘)
            {
                int lft,rgt,t=1;
                char *pos;
                int nl,nr;
                if(pos=strstr(s[i],"*"))
                {
                    if(*(pos+1)==‘[‘)
                    {
                        sscanf(s[i],"[%d,%d]*[%d,%d]",&lft,&rgt,&nl,&nr);
                        t=rand()%(nr-nl+1)+nl;
                    }
                    else sscanf(s[i],"[%d,%d]*%d",&lft,&rgt,&t);
                }
                else sscanf(s[i],"[%d,%d]",&lft,&rgt);
                while(t--)printf("%d ",rand()%(rgt-lft+1)+lft);
                printf("\n");
            }
            if(s[i][0]==‘<‘)
            {
                char lft,rgt;int t=1;
                char *pos;
                int nl,nr;
                if(pos=strstr(s[i],"*"))
                {
                    if(*(pos+1)==‘[‘)
                    {
                        sscanf(s[i],"<%c,%c>*[%d,%d]",&lft,&rgt,&nl,&nr);
                        t=rand()%(nr-nl+1)+nl;
                    }
                    else sscanf(s[i],"<%c,%c>*%d",&lft,&rgt,&t);
                }
                else sscanf(s[i],"<%c,%c>",&lft,&rgt);
                while(t--)printf("%c",rand()%(rgt-lft+1)+lft);
                printf("\n");
            }
            else printf("%s\n",s[i]);
        }
    }
}
int main()
{
    freopen("Input.txt","w",stdout);
    srand((unsigned)time(NULL));
    while(~scanf("%s",s[++sum]))if(strstr(s[sum],"EOF"))break;
    solve(1,sum-1,1);
}

#工具:格式化隨機數據發生