Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > [c++]генерация seed для random из строки


Автор: musclerider 12.4.2012, 21:01
Не хотел создавать новую тему. Итак, суть проблемы:

Пишу консольную программу, инфометр. Задача: выводить случайное значение от 1 до 100 при введении данных. Значение должно быть строго привязано к вводимым данным (т.е. если я ввожу "50" и мне выдает 14%, то оно всегда должно выводить 14% когда я ввожу "50"). Проблема заключается в том, что при введении цифровых значений все работает как надо, но при введении слов без цифровых значений все время выдает 50%, вне зависимости от слова или набора букв. А надо, что-бы как с цифрами - в зависимости от набора букв должно выдаваться конкретное значение). Код программы выглядит так:

Код
#include <iostream>
using namespace std; 
int main()
    {cout << "Vvedite infu: " << endl;

    int infa;
    cin >> infa; 
    int procent;
    srand(infa);
    procent = rand() % 100;
    cout << "Infa " << procent << "%" << endl;
return 0;}


Модератор: не забываем пользоваться кнопочкой "Код"

Автор: bsa 12.4.2012, 23:55
musclerider, тогда тебе необходимо считывать не число, а строку.
А к случайным числам это имеет мало отношения.

Автор: musclerider 13.4.2012, 00:34
Уже решил вопрос, некогда было на форуме отписать. Но все равно спасибо!
(char infa;)


Автор: bsa 13.4.2012, 10:07
musclerider, char принимает только один символ.  smile 
Тебе необходимо использовать std::string и std::getline.

Автор: borisbn 13.4.2012, 15:14
Цитата(musclerider @  13.4.2012,  00:34 Найти цитируемый пост)
(char infa;)

и как ты теперь введёшь 0 (не '0', а 0) ? или 8 ?

Автор: musclerider 13.4.2012, 18:19
Я просто нуб еще, только пару дней назад заинтересовался программированием. Сейчас попробую разобраться.
Пока вот такая печалька: "не существует подходящей функции преобразования из "std::string" в "unsigned int"
Похоже придется выдумывать как преобразовать string что-бы запихнуть его в srand, я наверное выражаюсь как быдло  smile 

Автор: volatile 13.4.2012, 19:12
Цитата(musclerider @  13.4.2012,  18:19 Найти цитируемый пост)
я наверное выражаюсь как быдло

нормально выражаетесь. 
Вам имхо хеш функция от строки нужна. а при хорошей хеш функции, уже и ранд, не нужен будет.

Автор: bsa 13.4.2012, 23:00
musclerider, можно, конечно, последовать совету volatile, но, думаю, тебе стоит просто просуммировать все символы строки:
Код
int sum = 0;
for(std::string::iterator i = str.begin(), e = str.end(); i != e; ++i)
   sum += static_cast<unsigned char>(*i);
Фактически, это и есть "хэш" функция. Но очень простая и ненадежная. Хотя тебе подойдет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)