Как перебрать буквенно-цифровые символы для строки из 2 символов - PullRequest
0 голосов
/ 08 февраля 2012

Мне нужно перебрать все буквенно-цифровые символы, включая строчные и прописные буквы и цифры, и для каждого из них мне нужно вызвать команду crypt.

Итак, я должен проверить Aa, aA, 1a, a1, 1A, A1 и т. Д. До всех возможных комбинаций и вызвать crypt KEY crypt_file.

Есть ли эффективный способ сделать это?

Спасибо

Ответы [ 4 ]

0 голосов
/ 08 февраля 2012

Вы используете 62 символа: 0-9, A-Z, a-z 10 + 26 + 26 = 62. Вам нужны все возможные комбинации из двух символов от 00 до zz. Думайте о них как о двухзначных числах в базе 62:

 0 -> 00
 1 -> 01
10 -> 0A
61 -> 0z
62 -> 10

Просмотрите все числа от 0 до 3843 (62 ^ 2 - 1) и преобразуйте их в двузначное число в базе 62.

0 голосов
/ 08 февраля 2012

Наиболее эффективным способом было бы сгенерировать сразу все комбинации и сохранить их в файле. Тогда просто прочитайте файл, так как комбинации не изменятся.

0 голосов
/ 08 февраля 2012

Введите список символов в строке, то есть "aA1". Это необходимо для проверки всех возможных комбинаций, таких как aA1,1Aa и т. Д.

#include<stdio.h>
#include<string.h>
#include<alloc.h>
#include<conio.h>


void swap(char*,int);
void gotoloop(char*,int);

void main()
{
char *ch;
int i,j,k,l;
ch=(char*)malloc(20);
//clrscr();
printf("Enter the string\n"); //Enter AAaa11 for your case
gets(ch);

l=strlen(ch);
gotoloop(ch,l);
//if flag !=false call encryption.
return;
}

void gotoloop(char *ch,int l)
{
int i,k;
k=l;

if(l<=1) 
return;


for(i=0;i<k;i++)
{
swap(ch,k);
l--;
gotoloop(ch,l);
l++;
if(k==2) {
 printf("\n%s ",ch);//check this from the list, if not found set FLAG=false
}
}

}


void swap(char *ch,int r)

{
char c;
int i;

c=ch[r-1];
for(i=r-1;i>0;i--)
ch[i]=ch[i-1];
ch[0]=c;
}
0 голосов
/ 08 февраля 2012

Вы можете поместить символы в массив.Что-то вроде:

const char vals[] = { '0', '1', '2', ..., 'a', 'b', ... 'Z' }; // Probably better to generate it programatically

Двойной цикл «для» должен сделать это:

int i;
for (i = 0; i < kNumVals; i++) // kNumVals is the number of characters in your array
{
    int j;
    for (j = 0; j < kNumVals; j++)
    {
        char myString[3] = {vals[i],vals[j],'\0'};
        // Do something with myString
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...