#工具:格式化随机数据发生

Posted maoruimas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#工具:格式化随机数据发生相关的知识,希望对你有一定的参考价值。

支持单区间随机数输出、同区间随机数重复输出、普通数据直接输出、一组数据重复输出、修改输出文件、随机字符串输出

  • [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("
");
            }
            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("
");
            }
            else printf("%s
",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);
}

以上是关于#工具:格式化随机数据发生的主要内容,如果未能解决你的问题,请参考以下文章

测试工具研发_生成随机密码

播放随机声音而不重复

当另一个片段中的数据发生更改时,如何刷新一个片段中的 RecyclerView

使用导航从工具栏菜单项单击在片段之间传递数据 - Kotlin

YASnippet - emacs 的代码片段管理工具

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?