Показать полную графическую версию : [решено] Генерация массива символов
Привет.
Вообщем нужно сделать случайную генерацию имён для файлов.
Символы должны браться из специального массива.
Имя должно быть в виде char name[10].
char symb[] = "asdfghjkl"; // массив с символами
Пробовал делать через rand(), но он похоже подходит только для int.
Может есть какие-нибудь мысли как это реализовать?
Спасибо.
Delirium
28-01-2011, 07:37
в англ языке 26 букв. делаем rand от 1 до 26. Потом пишем функцию, возвращающую букву по выпавшему порядковому номеру. вот и все :)
Пробовал делать через rand(), но он похоже подходит только для int. »
нет, он не подходит для инт, я тебе открою секрет - ранд выдает значения от 0 до 1. но умные люди говорят:
rand()*x+y дает значение в пределах [y,x+y].
А еще обратиться к любому элементу массива можно через его порядковый номер. скажем
symb[10]
так почему бы не объеденить эти две идеи в такие строчки (хотя можно и одной)
int i = rand()*(symb.length-1); //случайное число от 0 до длинны массива
char otvet = symb[i];
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
Сделал, но не работает, точнее работает, но периодически выдаёт какие то левый символы, и выходит за рамки размера имени.
где то ошибка.( чувство будто я в цифрах заплутал.
Решил проблему так:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.