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

来源:互联网 发布:js return 多个值 编辑:程序博客网 时间:2024/05/16 21:19

本人大一狗,才学完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值。

原创粉丝点击