Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Генерация массива символов (http://forum.oszone.net/showthread.php?t=197862)

Rain789 28-01-2011 04:53 1598867

Генерация массива символов
 
Привет.

Вообщем нужно сделать случайную генерацию имён для файлов.
Символы должны браться из специального массива.
Имя должно быть в виде char name[10].

char symb[] = "asdfghjkl"; // массив с символами

Пробовал делать через rand(), но он похоже подходит только для int.

Может есть какие-нибудь мысли как это реализовать?

Спасибо.

Delirium 28-01-2011 07:37 1598907

в англ языке 26 букв. делаем rand от 1 до 26. Потом пишем функцию, возвращающую букву по выпавшему порядковому номеру. вот и все :)

Beyound 28-01-2011 16:55 1599307

Цитата:

Цитата Rain789
Пробовал делать через rand(), но он похоже подходит только для int. »

нет, он не подходит для инт, я тебе открою секрет - ранд выдает значения от 0 до 1. но умные люди говорят:
rand()*x+y дает значение в пределах [y,x+y].
А еще обратиться к любому элементу массива можно через его порядковый номер. скажем
symb[10]
так почему бы не объеденить эти две идеи в такие строчки (хотя можно и одной)
int i = rand()*(symb.length-1); //случайное число от 0 до длинны массива
char otvet = symb[i];

Rain789 28-01-2011 17:32 1599318

Код:

                srand((unsigned)time(NULL));
                char symb[] = "asdfghjkl";
                char n_name[10];

                unsigned int j;
                for (int i = 0; i < 9; i++)
                {
                        j = rand()%9;
                        n_name[i] = symb[j];
                }
                m_Size = n_name; // присваиваем CString значение m_name для вывода в Edit Control

Сделал, но не работает, точнее работает, но периодически выдаёт какие то левый символы, и выходит за рамки размера имени.
где то ошибка.( чувство будто я в цифрах заплутал.

Rain789 28-01-2011 18:26 1599344

Решил проблему так:
Код:

                srand((unsigned)time(NULL));
                char symb[10] = "asdfghjkl";
                char n_name[10] = "asdfghjkl"; // присвоил n_name какое то значение, ибо по какой то причине она забивалась мусором.

                unsigned int j;
                for (int i = 0; i < 9; i++)
                {
                        j = rand()%9;
                        n_name[i] = symb[j];
                }
                m_Size = n_name;

Проследил за переменными и оказалось что n_name получает какое-то косячное значение.
Вроде работает.


Время: 08:37.

Время: 08:37.
© OSzone.net 2001-