Заполнение массива

Тема в разделе "WASM.BEGINNERS", создана пользователем denisznu, 15 окт 2008.

  1. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Всем привет, вообщем есть у меня в массиве alpha алфавит(сейчас он не полный), так-же есть массив key,нужно в массив key записать все возможные символы с alpha (по 4 символа), так что-бы символы повторялись. Начал писать и столкнулся с такой проблемой, как мне записывать символы с альфа не по порядку?

    #include <iostream>
    using namespace std;

    int main(){
    int i,j;
    char alpha[]="abcdefrtwz";
    char key[4];

    int alphasize=strlen(alpha);

    for(j=0;j<alphasize;j++){



    for(i=0;i<4;i++){
    key=alpha;
    }

    cout<<key<<endl;

    }
    return 0;
    }
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    rand() % strlen(alpha) ?
     
  3. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    key=rand() % strlen(alpha)

    Не катит...функция ранд возвращает int и генерирует числа...Или как ты предлагал? МОжет я что-то не понял
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    key = alpha[rand() % strlen(alpha)];
     
  5. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Врятли с помошью rand можно перебрать все возможные значения.
     
  6. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    из массива альфа "abcdefrtwz" нужно получить всевозможные 4хзначные комбинации?
    такие как:
    aaaa
    aaab
    aaac
    .....
    aaaz
    baaa
    baab
    и т д

    так или чтото не так понял из условия?
     
  7. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Да, ты понял верно.
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    denisznu
    Тогда школьный курс комбинаторики
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    а че тут
    пишем по букве в ячейку массива
    потом цикл от 0 и до макс 4х циферного числа в вашем базисе (10 букв -> 0000 .. 9999) с подменой цифр буквами из массива (каждая цифра - индекс в массиве)
    ну и все
     
  10. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    http://www.google.com/search?q=all+possible+combinations+c
     
  11. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    самый простой вариант:
    Код (Text):
    1. int i, j, k, z;
    2. char alpha[]="abcdefrtwz";
    3. char key[5];
    4.  
    5. int alphasize=sizeof(alpha);
    6. key[4]=NULL;
    7.  
    8. for (i=0;i<alphasize;i++) {
    9.     for (j=0;j<alphasize;j++) {
    10.         for (k=0;k<alphasize;k++) {
    11.             for (z=0;z<alphasize;z++) {
    12.                 key[0] = alpha[i];
    13.                 key[1] = alpha[j];
    14.                 key[2] = alpha[k];
    15.                 key[3] = alpha[z];
    16.                     printf("key = %s /n", key)
    17.             }
    18.         }
    19.     }
    20. }
    Если ошибки где то, то сорри, на работе студии нет, проверить неначем.
    Но суть будет такая.
    Кстати если в алфавите будут повторяющиеся символы - то будут одинаковые варианты ключа.
    P.S. Единственное надо уточнить вычисление размера алфавита, я по памяти не помню, sizeof учитывает ли нулевой байт строки или нет. Ну это легко можно глянуть в мсдн.
     
  12. denisznu

    denisznu New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    15
    Спасибо, но я воспользовался следующим методом:

    for(int a=0;a<alphasize;a++){
    for(int b=0;b<alphasize;b++){
    for(int c=0;c<alphasize;c++){
    for(int d=0;d<alphasize;d++){

    sprintf(key,"%c%c%c%c",alpha[a],alpha,alpha[c],alpha[d]);
    cout<<key<<endl;
    }
    }
    }
    }