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

fstream, string, random - C++

Восстановить пароль Регистрация
 
dane.yeah
15 / 15 / 1
Регистрация: 08.04.2012
Сообщений: 133
23.10.2013, 12:53     fstream, string, random #1
Вопрос такой, есть структура
C++
1
2
3
4
5
6
7
8
9
struct StructEmployee {;
    int id;
    string surname;
    string name;
    string patronymic;
    string appointment;
    string education;
    int expirience;
} UsrStruct;
Данные записываются вручную пользователем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        StructEmployee UsrStruct[StructSize];for (int ind=0; ind < StructSize; ind++) {
        cin.ignore();       
        system("cls");
        UsrStruct[ind].id = ind+1;
        cout << "Введите фамилию:" << endl;
        getline(cin,UsrStruct[ind].surname);
        cout << "Введите имя:" << endl;
        getline(cin,UsrStruct[ind].name);
        cout << "Введите отчество:" << endl;
        getline(cin,UsrStruct[ind].patronymic);
        cout << "Введите данные об образовании работника:" << endl;
        getline(cin,UsrStruct[ind].education);
        UsrStruct[ind].expirience = rand()%30;
        ofstream labfile("lab.dat", ios::binary);
        labfile.write((char*)(&UsrStruct[ind]),sizeof(UsrStruct));
        labfile.close();
    }
Но это никак не представляется удобным, возможно ли проделать такое чтобы:
C++
1
UsrStruct[ind].surname, UsrStruct[ind].name, UsrStruct[ind].patronymic
- бралось из файла FIO.txt рандомом из списка фамилий, записанных в файле, через \n, имя и отчество отделено от фамилии и друг от друга через пробел
Иванов Иван Иванович
Сидоров Сидор Сидорович
и т.д.
C++
1
UsrStruct[ind].education
- аналогично первому, только из другого файла, ну с этим разберусь если будет хотя бы первое
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 12:53     fstream, string, random
Посмотрите здесь:

FStream C++
C++ fstream с++
C++ fstream
C++ fstream
<fstream> C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
23.10.2013, 12:58     fstream, string, random #2
А в чем проблема? Точно так же открываем файл с фамилиями на чтение ifstream'ом и понеслась.
dane.yeah
15 / 15 / 1
Регистрация: 08.04.2012
Сообщений: 133
23.10.2013, 13:01  [ТС]     fstream, string, random #3
Цитата Сообщение от Rivory Посмотреть сообщение
А в чем проблема? Точно так же открываем файл с фамилиями на чтение ifstream'ом и понеслась.
Собственно проблема в рандоме, и в разделителях.
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
23.10.2013, 13:28     fstream, string, random #4
Ну дергайте построчно весь файл в какой-нибудь контейнер, например вектор, потом от туда выбирайте рандомную строку, разбивайте её на слова и запихивайте в объект структурки. Что-то вроде такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(int argc, char** argv)
{
    ifstream infile("FIO.txt");
    string line;
    vector<string> lines;
    if(!infile.is_open()) cout<<"WHYYYY?";
    while (getline(infile, line))
    {
        try {
            lines.push_back(line);
        } catch (...) {
            infile.close();
            throw;
        }
    }
    system("pause");
    return 0;
 }
В итоге вектор lines у меня полностью заполнен строками вида Ivanov Ivan Ivanovich
dane.yeah
15 / 15 / 1
Регистрация: 08.04.2012
Сообщений: 133
23.10.2013, 23:47  [ТС]     fstream, string, random #5
Добавлено через 1 час 3 минуты
Цитата Сообщение от Rivory Посмотреть сообщение
Ну дергайте построчно весь файл в какой-нибудь контейнер, например вектор, потом от туда выбирайте рандомную строку, разбивайте её на слова и запихивайте в объект структурки. Что-то вроде такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(int argc, char** argv)
{
    ifstream infile("FIO.txt");
    string line;
    vector<string> lines;
    if(!infile.is_open()) cout<<"WHYYYY?";
    while (getline(infile, line))
    {
        try {
            lines.push_back(line);
        } catch (...) {
            infile.close();
            throw;
        }
    }
    system("pause");
    return 0;
 }
В итоге вектор lines у меня полностью заполнен строками вида Ivanov Ivan Ivanovich
И всё таки не могу понять как добиться рандома из вектора, у нас есть lines.begin() и lines.end() как голова вектора и концовка, а как получить какой-нибудь средний не пробегая по всему вектору не пойму, допустим можно конечно данные из вектора отправлять в структуру, а потом только рандомом их

Добавлено через 44 минуты
Разобрался, спасибо)
Yandex
Объявления
23.10.2013, 23:47     fstream, string, random
Ответ Создать тему
Опции темы

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