您的位置:首页 > 编程语言 > C语言/C++

自创的C语言枚举字符串算法

2013-05-31 23:07 253 查看
本人大一狗,才学完C语言。

本来是制作一个用字典法暴力破解hash值的程序,但是途中出现了问题,就是字典文件。8位纯字母的字典居然要1000多GB,无奈之下只能使用枚举法来循环字符串了。

当时是比赛的一道题目,由于需要每种可能的情况,所以要循环出N位所有可能性的纯字母字符串,就是从aaaaa~zzzzz所有的可能性。

我使用的是数组,每位用ASCII的值来循环达到目的,循环出数字后用类型转换转换成字符型,最终得出需要的字母。

#include<stdio.h>
int main()
{
int i,j,k,l,m;//定义循环变量
char word[6];//定义存放字符串的数组,大小因为字符串大小+1个,因为最后应该存放字符串结束符'\0'

for(i=97;i<=122;i++)//开始第一位循环 97和122代表ASCII码a-z
{
for(j=97;j<=122;j++)//第二位循环
{
for(k=97;k<=122;k++)//第三微循环
{
for(l=97;l<=122;l++)//第四位循环
{
for(m=97;m<=122;m++)//第五位循环
{

word[0]=(char)i;//需要类型转换,将ascii码转换为字符
word[1]=(char)j;
word[2]=(char)k;
word[3]=(char)l;
word[4]=(char)m;
word[5]='\0';//在数组最后插入'\0'结束符,否则会出现乱码
printf("%s\n",word);//输出字符串
}
}
}
}
}

return 0;
}

这是一个5位字符串的循环,老师说循环层数太多效率低,所以我标题说了效率低。。
for里面的97 和 122代表了ascii码表里的a和z,这表示每位字符从a循环到z,如果还有大写、数字、字符的话可以更改这里的数字为相应的ascii值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  枚举 C