Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
4 / 2 / 2
Регистрация: 14.03.2019
Сообщений: 14

Работа со строковыми векторами

26.05.2019, 14:44. Показов 2154. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый вечер! Я пишу программу, в которой мне необходимо использовать векторы, ибо через них будет реализовать задачу удобнее всего.

В файле users.dat записаны аккаунты в виде: login | password, где | - разделитель.
Нужно считать первое слово (login) строковой вектор vLogin, а 3е слово (password) в такой-же вектор vPassword.
Я делаю это таким образом:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        // Глобальные векторы:
        vector<string> vLogin;
        vecotr<string> vPassword;
 
    ifstream usersOut("users.dat");
    string buffer = "";
    int accountCount = 0;
 
    if (usersOut.is_open()) {
        // получем кол-во строк в файле(кол-во аккаунтов)
        while (!usersOut.eof()) {
            getline(usersOut, buffer);
            accountCount++;
        }
        // переносим указатель в начало файла
        usersOut.seekg(0, ios_base::beg);
        usersOut.close();
        usersOut.open("users.dat");
 
        // устанавливаем размер векторов
        vLogin.reserve(accountCount);
        vPassword.reserve(accountCount);
 
        // записываем логины и пароли в векторы
        while (!usersOut.eof()) {
            usersOut >> buffer; // 1е слово - логин
            vLogin.push_back(buffer); // записываем логин в вектор
            usersOut >> buffer; // 2е слово - разделитель
            usersOut >> buffer; // 3е слово - пароль
            vPassword.push_back(buffer); // записываем паророль в вектор
        }
 
        SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        cout << "[";
        SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
        cout << "OK";
        SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
        cout << "] ";
        if(accountCount > 1) cout << "Загружено " << accountCount << " аккаунтов" << endl;
        else cout << "Загружен " << accountCount << " аккаунт" << endl;
        ofstream logFile(fileName.c_str(), ios_base::app);
        if(accountCount > 1) logFile << "[" << getTime() << "] " << "Загружено " << accountCount << " аккаунтов" << endl;
        else logFile << "[" << getTime() << "]" << "Загружен" << accountCount << "аккаунт" << endl;
        logFile.close();
 
        for (int i = 0; i <= vLogin.size(); i++) cout << "[" << i << "] " << "Логин: " << vLogin[i] << " Пароль: " << vPassword[i] << endl; // тестовый вывод элементов вектора
    }
        else {
            SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
            cout << "[";
            SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
            cout << "ERROR";
            SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
            cout << "] ";
            cout << "Список пользователей отсутствует, и будет создан заново!" << endl;
 
            ofstream usersNew("users.dat");
            usersNew << "developer | devCode228";
            usersNew.close();
        }
    usersOut.close();
P.S. Если увидите что какая-то переменная или функция не объявлена, то я объявил её до этого кода, это кусок

Все работает ! Только после вывода вектора циклом, выдает ошибку

Помогите пожалуйста Может я где-то ошибся, и не замечаю!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.05.2019, 14:44
Ответы с готовыми решениями:

Работа со строковыми файлами
Доброго времени суток! Есть программа, которая не хочет компилироваться. Прошу помочь разобраться с ошибками в коде: #include...

Работа со строковыми данными
Даны три названия улиц. Определять, есть ли среди них заданное. Вывести соответствующее сообщение.

Работа со строковыми данными
Дана строка. Подсчитать количество содержащихся в ней цифр1|2|3.

4
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
26.05.2019, 15:00
Лучший ответ Сообщение было отмечено leonid_toster как решение

Решение

C
1
for (int i = 0; i <= vLogin.size(); i++)
В конце выход за границы диапазона. В векторе не может быть элемента с индексом равным его размеру.
Возможно, имелось в виду
C
1
i < vLogin.size()
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.05.2019, 15:00
leonid_toster, 46 строка i < vLogin.size(); или i <= vLogin.size() - 1;, индексы в векторе с ноля начинаются и заканчиваются на vLogin.size() - 1.
1
4 / 2 / 2
Регистрация: 14.03.2019
Сообщений: 14
26.05.2019, 15:07  [ТС]
Спасибо большое, все работает! А я и не знал что так нельзя
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.05.2019, 15:13
И еще.
Цитата Сообщение от leonid_toster Посмотреть сообщение
C++
1
2
3
4
5
while (!usersOut.eof()) 
{ 
   getline(usersOut, buffer); 
   accountCount++; 
}
Здесь будет одно лишнее чтение, т.к. ситуация "конец файла" наступает ПОСЛЕ попытки чтения за концом файла
C++
1
2
3
4
while (getline(usersOut, buffer)) 
{ 
   accountCount++; 
}
Аналогично
C++
1
2
3
4
5
6
7
while (usersOut >> buffer) {
            ; // 1е слово - логин
            vLogin.push_back(buffer); // записываем логин в вектор
            usersOut >> buffer; // 2е слово - разделитель
            usersOut >> buffer; // 3е слово - пароль
            vPassword.push_back(buffer); // записываем паророль в вектор
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.05.2019, 15:13
Помогаю со студенческими работами здесь

Работа со строковыми переменными
Поиск позиции N-го вхождения символа C в строке s. Если такой количества вхождений нет - функция должна вернуть значение -1. ...

Работа со строковыми файлами
Здравствуйте! Прошу помочь разобраться с ошибками в коде: #include &lt;string.h&gt; #include &lt;fstream&gt; #define max 256 ...

Работа со строковыми данными.
Дана строка-предложение на русском языке. Зашифровать ее, выполняя циклическую замену каждой буквы на следующую за ней в алфавите и...

Работа со строковыми переменными без использования string.h
Нужно заменить в строке s множественные последовательности вхождений символа t на один. То есть &quot;aaabcde&quot; заменяется на...

Работа с векторами
Всем привет. Посмотрел, что такое вектор, понял, что это удобная штука) Но ещё не совсем понял некоторые методы работы с ним. Допустим...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru