gpt4 book ai didi

c - 如何生成长度恰好等于 8 的所有标记的集合

转载 作者:行者123 更新时间:2023-11-30 21:29:32 24 4
gpt4 key购买 nike

我需要生成大小恰好等于 8 的完整 token 集。 token 中的每个位都可以采用 0 - 9A -Z 中的值。例如-

以下是有效的 token :000000000000000A000000H1Z00000XA

所以基本上我想生成从 00000000 到 ZZZZZZZZ 的所有 token 。我如何在 C 中执行此操作

最佳答案

你发现我有一天不想做我应该做的事情1

下面的代码仅生成 token 输出;它不会尝试在任何地方存储 token 。您可以将输出重定向到文件,但正如其他人指出的那样,您将需要更大的 boat 硬盘来存储 368 字符串。可能有一种方法可以在不使用嵌套循环的情况下执行此操作,但这种方法非常简单。第一个循环更新每个位置的计数器,而第二个循环将计数器映射到符号并将符号写入标准输出。

您可以将 LEN 设置为较小的值(例如 3),以验证程序是否执行您想要的操作,而不会生成 TB 级的输出。或者,您可以使用较小的字符集作为数字。理想情况下,LENdigs 都应该是命令行参数而不是常量,但我已经在这方面花费了太多时间。

编辑

好吧,我撒谎了。显然我没有花太多时间在这上面,因为我已经清理了一个小错误(第一个字符串没有正确显示,因为我在显示之前进行了更新)并且我已经设置了长度和字符集命令行输入。

请注意,此代码假定为 C99。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define DEFAULT_LEN 8

int main( int argc, char **argv )
{
const char *default_digs="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
size_t len = DEFAULT_LEN;
const char *digs = default_digs;

if ( argc > 2 )
digs = argv[2];

if ( argc > 1 )
len = strtoul( argv[1], NULL, 10 );

int idx[len];
memset( idx, 0, sizeof idx );

size_t diglen = strlen( digs );

for(;;)
{
int j = len;
while( j )
putchar( digs[idx[--j]] );

putchar( '\n' );

while ( j < len && idx[j] == diglen - 1 )
idx[j++] = 0;

if ( j == len )
break;

idx[j]++;
}

return 0;
}

示例输出:

[fbgo448@n9dvap997]~/prototypes/tokgen: ./tokgen 2 01
00
01
10
11

[fbgo448@n9dvap997]~/prototypes/tokgen: ./tokgen 3 01
000
001
010
011
100
101
110
111

[fbgo448@n9dvap997]~/prototypes/tokgen: ./tokgen 2 012
00
01
02
10
11
12
20
21
22

<小时/> 1.公平地说,这几乎是任何以“y”结尾的一天。

关于c - 如何生成长度恰好等于 8 的所有标记的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30601749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com