Форум программистов, компьютерный форум CyberForum.ru

Генератор текста - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
reimon245
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 2
18.05.2013, 07:59     Генератор текста #1
Добрый день. Вот начинаю осваиваться с C++, но абсолютно не владею функциями рандома. Может кто-нибудь если не сложно уделить 5-7 минут своего времени и накидать эскиз программы-генератора текста. Я имею ввиду будут даны допустим 100 предложений, и нужно чтобы программа из этих 100 предложений выбирала 5-7 рандомных и из них делала текст, но без повторений предложений. будьте добры подкиньте эскиз,та допилю. Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
18.05.2013, 08:21     Генератор текста #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
#define N 5
#define M 2
 
int main(int argc, char* argv[])
{
    char sstr[N][256] = { "Hi, It works!!!", "Example#1", "That's all folks", "Example#2", "The last sentense." };
 
    int count = M; char str[256] = "\0";
    while (--count >= 0)
    {
        int r = rand() % (N-1) + 1;
        strcat_s(str, 256, sstr[r]);
    }
 
    printf("%s\n",str);
 
    _getch();
 
    return 0;
}
http://codepad.org/dngxTjU1
Миниатюры
Генератор текста  
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 584
Завершенные тесты: 2
18.05.2013, 10:16     Генератор текста #3
у вас всегда будет генериться "That's all folksThe last sentense." Чтобы такого не было, используйте следующее:
C++
1
2
3
4
5
6
7
8
...
#include <time.h>
 
int main(int argc, char* argv[])
{
    srand(time(NULL));
    ...
}
reimon245
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 2
18.05.2013, 10:51  [ТС]     Генератор текста #4
Все спасибо все ок!
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 11:11     Генератор текста #5
Вот еще мой элегантный вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//генератор текста
#include <iostream>
using std::cout;
using std::endl;
#include <list>
using std::list;
#include <string>
using std::string;
#include <cstdlib>
using std::rand;
using std::srand;
#include <ctime>
using std::time;
 
int main()
{
    list<string> mass;
    list<string> result;
    list<string>::iterator it;
 
    //добавляем предложения
    mass.push_back("hellow world");
    mass.push_back("hellow world gacpada");
    mass.push_back("da da da");
    mass.push_back("afddsf dsfsadf fdasdfas");
    mass.push_back("cha cha cha");
 
    srand(time(0));
    
        //генерируем 2 слова.
    while(result.size()<2)
    {
        it=mass.begin();
        advance(it,rand()%(mass.size()-1));
        result.push_back(*it);
        mass.erase(it);
    }
    
    //вывод result
    for(it=result.begin();it!=result.end();++it)
        cout <<*it<<' ';
    cout <<endl;
    
    return 0;
}
0x10
18.05.2013, 12:40
  #6

Не по теме:

ninja2, [наезд]А чо list, а не vector?[/наезд] Вообще алгоритм странный, ну да фиг с ним. Не хочу в сотый раз искать ссылку на то, как это делается.

ninja2
18.05.2013, 13:38
  #7

Не по теме:

0x10, Да я просто щас контейнеры учу, вчера list разобрал, поэтому и с лист сделал для разнообразия. А сегодня уже deque разбираю, можно б было б на qeque сделать, deque почти как вектор

Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
18.05.2013, 14:36     Генератор текста #8
Предложения в файле оканчиваются точкой, восклицательным или вопросительным знаком, а так же разделены пробелом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <vector>
#include <iterator>
#include <fstream>
#include <random>
#include <chrono>
#include <algorithm>
 
using namespace std;
 
int main()
{
    ifstream text("text.txt");
    vector<string> sentences;
    istreambuf_iterator<char> it(text);
    string sentence;
 
    while ( it != istreambuf_iterator<char>() ) {
        sentence.push_back(*it);
        if ( *it != '.' && *it != '!' && *it != '?' ) {
            ++it;
            continue;
        } else {
            sentences.push_back( move(sentence) );
            sentence.clear();
            ++it;
            ++it;
        }
    }
 
    const unsigned random_count = 5;
    vector<unsigned> idx(random_count, sentences.size());
 
    default_random_engine gen(chrono::system_clock::now().time_since_epoch().count());
    uniform_int_distribution<unsigned> distribution(0, sentences.size() - 1);
    unsigned val;
 
    for (auto &i : idx) {
        while ( find( begin(idx), end(idx), (val = distribution(gen)) ) != end(idx) );
        i = val;
    }
 
    for (auto i : idx)
        cout << " " << i + 1 << ")" << sentences[i];
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2013, 17:52     Генератор текста
Еще ссылки по теме:

Создать генератор текста по шаблону C++
Генератор на С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PHPистер
 Аватар для PHPистер
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 9
09.11.2013, 17:52     Генератор текста #9
Ребятки спс, помогли

Добавлено через 25 минут
ninja2, Поможешь?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package generatortexts;
public class GeneratorTexts {
public static void main(String[] args) {
      String[] wordListOne = {"Привет", "Пока"};
      String[] wordListTwo = {","};
      String[] wordListThree = {"друг", "враг"};
      int oneLength = wordListOne.length;
      int twoLength = wordListTwo.length;
      int threeLength = wordListThree.length;
      int rand1 = (int) (Math.random() * oneLength);
      int rand2 = (int) (Math.random() * twoLength);
      int rand3 = (int) (Math.random() * threeLength);
      String phrase = wordListOne[rand1]+ " " +wordListTwo[rand2]+ " " +wordListThree[rand3];
      System.out.println(""+phrase);
    }
    
}
Java
1
 String phrase = wordListOne[rand1]+ " " +wordListTwo[rand2]+ " " +wordListThree[rand3];
Короче склеиваю слова: рандомно выбирается слово из wordListOne потом рандомно из wordListTwo и.д.
В твоем варианте просто перемешивается слова.
Yandex
Объявления
09.11.2013, 17:52     Генератор текста
Ответ Создать тему
Опции темы

Текущее время: 06:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru