Войти

Показать полную графическую версию : [решено] Генерация массива символов


Rain789
28-01-2011, 04:53
Привет.

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

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

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

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

Спасибо.

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

Beyound
28-01-2011, 16:55
Пробовал делать через 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
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
Решил проблему так:

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 получает какое-то косячное значение.
Вроде работает.




© OSzone.net 2001-2012