Другие языки программирования и технологии

Генератор случайных слов (строк) из файла на C++.

Генератор случайных слов (строк) из файла на C++ .Хочу из файла брать рандомную строку и выводить в строке программы. Помогайте.
Igor Kravcenko
Igor Kravcenko
414
#include < iostream >
#include < windows.h >
#include < ctime >
#include < cstdlib >
#include < string >
#include < fstream >
#include < vector >

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");
srand(time(0u));

cout << "Введите полное имя файла *.txt со строками" << endl
<< "Например: C:\\Users\\t.txt" << endl;
string way;
getline(cin, way);
ifstream fin(way);
vector < string > read;
if (fin)
{
for (;fin;)
{
string temp;
getline(fin, temp);
read.push_back(temp);
}
read.pop_back();
cout << "Случайно взятая строка из файла *.txt" << endl
<< read[rand() % read.size()] << endl;
}
else
{
cout << "Указанный файл *.txt не удалось открыть" << endl;
}

system("pause");
return 0;
}
Алексей Кургузов
Алексей Кургузов
8 552
Лучший ответ
Есть такая функция strchr(const char *s, int c) - она ищет вхождение символа c в строке s и возвращает указатель на найденный символ или NULL если он не найден . На ее основе можно делать разбивку строки на отдельные слова:

//Возвращает указатель на первый символ строки, который не является
//пробелом, табуляцией или еще чем-то подобным, т. е. представляет
//собой начало слова.
//По указателю *next записывает указатель на первый символ после
//окончания слова или NULL если такого символа нет
char*get_word( char* str, char** next )
{
char*first;
char*ptr;

ptr = str;
*next = NULL;
while( *ptr )
{
//Байт по указателю *ptr является пробелом?
if( strchr( BLANK_CHAR, *ptr ) )
{
//Да - необходимо перейти на следующий байт
ptr++;
}
else
{
//Нет - завершаем цикл
break;
}
}

//Сохраним начало слова
first = ptr;
//Теперь найдем окончание слова
if( *ptr )
{
while( *ptr )
{
//Байт по указателю *ptr не является пробелом?
if( !strchr( BLANK_CHAR, *ptr ) )
{
//Да
ptr++;
}
else
{
//Нет - завершаем цикл
break;
}
}
//Проверим, почему завершился цикл
if( *ptr )
{
//Мы остановились потому что нашли пробел
//Терминируем слово
*ptr = '\0';
//Перейдем на следующий символ
ptr++;
//Если это не конец строки, то вернем указатель
//на следующий символ
if( *ptr )
{
*next = ptr;
}
}
}

returnfirst;
}

По ссылке - исходный код программы, который делает подобный разбор: https://pastebin.com/zL4aTrYE Это, кончено, довольно примитивный парсер, но вполне рабочий.
чем помочь?
Igor Kravcenko код бы мне, сам не могу додуматься
Почитай про стандартные методы работы с файлами. Открытие, закрытие, считывание из файла строки и далее делай что нужно. Разбивай по пробелам и заноси в массив, потом генерируй рандомное число в диапазоне от 0 до количества слов, на которые разбилась строка. Вот и выводи рандомное слово через рандомную генерацию индекса. Осталось написать все методы по отдельности.
Adik Akunov
Adik Akunov
5 124