Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.06.2015
Сообщений: 65

Не удается разбить текст файла на vector-строки

26.03.2019, 17:17. Показов 1382. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал велосипед код который парсит конфиги (ищет нужное значение по ключу)
Код программы
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
typedef std::vector<std::string> vec_t; // error C2440: 'type cast' : cannot convert from 'const std::string' to 'char' xstring 843 1
//typedef std::vector<std::vector<std::string>> vec_t; // (как нормально строку то получать????)
 
const char* cCFG::cCFG_GetValue(const char* cFileName, const char* cKey, const char* cDefaultValue)
{
    std::ifstream inFile(cFileName);
    if (!inFile)
    {
        throw std::runtime_error("ERR_CANT_OPEN_FILE");
    }
 
    if (std::string(cKey).find_first_of(';') != std::string::npos)
    {
        throw std::runtime_error("ERR_SYSTEM_CHAR_IN_CKEY");
    }
    if (std::string(cDefaultValue).find_first_of(';') != std::string::npos)
    {
        throw std::runtime_error("ERR_SYSTEM_CHAR_IN_CDEFAULTVALUE");
    }
 
    try
    {
        vec_t table;
        std::string line;
        while (std::getline(inFile, line))
        {
            std::istringstream iss(line);
            table.emplace_back(std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>());
        }
 
        std::string ccKey;
        std::string ccValue;
 
        for( int i = 0; i < table.size(); i++)
        {
            if ((const char*)table[i].c_str()[0] == ";")
            {
                std::cout << "\tCOMMENT: " << table[i] << std::endl;
                continue;
            }
            
            sscanf((const char*)table[i].c_str(), "%s = %s", ccKey, ccValue);
 
            std::cout << "\tLINE: " << table[i] << std::endl;
            if (ccKey == cKey)
            {
                return ccValue.c_str();
            }
        }
        return cDefaultValue;
    }
    catch(...)
    {
        throw std::runtime_error("ERR_CANT_READ_FILE_CONTENT");
    }
}
Сделано это все костыльно и на скорую руку но просто ради собственного развития.
Но, тут заковырка в том что когда используется двойной вектор, все компилируется, но работает не правильно, а когда я использую одинарный вектор - при компиляции выбивает ошибку:
error C2440: 'type cast' : cannot convert from 'const std::string' to 'char' | xstring | 843 | 1

Не понятно в чем причина, что, почему, где и зачем. Не знаете случаем в чем моя ошибка?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2019, 17:17
Ответы с готовыми решениями:

Текст из файла разбить на строки
Помогите написать программу, с функцией которая выводит из текстового файла только N строк. Где N аргумент функции main

Прочитать с файла текст и разбить на строки
Добрый день. Задача стоит в том чтобы считать с файла информацию и вывести ее в ListBox, но выводить надо по особому, как только в файле...

Разбить текст из текстового файла на строки и добавить в массив
Есть текстовый файл text1.txt, состоящий из 100 строк, в котором находятся имена и фамилии в таком виде: Иван Петров Пётр Сидоров ...

6
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.03.2019, 17:21
Цитата Сообщение от NightMan2015 Посмотреть сообщение
как нормально строку то получать
у std::string есть метод c_str
0
1 / 1 / 0
Регистрация: 25.06.2015
Сообщений: 65
26.03.2019, 17:26  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
у std::string есть метод c_str
Никак не решает мою проблему.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
26.03.2019, 17:30
Лучший ответ Сообщение было отмечено NightMan2015 как решение

Решение

NightMan2015,
C++
1
2
3
4
5
6
7
8
9
10
11
12
ifstream in("file.txt");
//по строкам и словам
vector<vector<string>> lines_and_words;
string line;
while (getline(in, line)) {
    stringstream ss(line);
    lines_and_words.emplace_back(vector<string>(istream_iterator<string>(ss), istream_iterator<string>()));
}
//по строкам
vector<string> lines;
while (getline(in, line))
    lines.push_back(line);
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
26.03.2019, 17:30
Цитата Сообщение от NightMan2015 Посмотреть сообщение
Никак не решает мою проблему.
если не решает приведи контекст вызова функции cCFG_GetValue
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
26.03.2019, 17:31
NightMan2015, Работа с абстрактным классом, считывание данных
Вот здесь есть урывок кода, который можно легко переделать что бы строки сохраняло в вектор.
0
1 / 1 / 0
Регистрация: 25.06.2015
Сообщений: 65
26.03.2019, 17:41  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
NightMan2015,
C++
1
2
3
4
5
6
7
8
9
10
11
12
ifstream in("file.txt");
//по строкам и словам
vector<vector<string>> lines_and_words;
string line;
while (getline(in, line)) {
    stringstream ss(line);
    lines_and_words.emplace_back(vector<string>(istream_iterator<string>(ss), istream_iterator<string>()));
}
//по строкам
vector<string> lines;
while (getline(in, line))
    lines.push_back(line);
Помогло, премного благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2019, 17:41
Помогаю со студенческими работами здесь

Разбить текст ячейки (строки), содержащий разделитель, на строки макросом
Необходимо разбить текст в ячейке (с разделителями &quot;Alt+Enter&quot;) на отдельные строки

Разбить текст на строки длиной до 300 символов, вывести полученные строки в разные Label
Я с базы данных вывожу текст, нужно сделать так, чтобы текст выводился в lable1 до определенного момента(MaximumSize 300;0),после того как...

Разбить текст ячейки (строки), содержащий разделитель, на строки
Необходимо разбить текст в ячейке (с разделителями &quot;Alt+Enter&quot;) на отдельные строки

Разбить текст на строки
Имеется текст в одну строку, например &quot;машина легковая , мотоцикл ява , спортивный велосипед &quot; ,требуется разбить его на строки...

Разбить текст на строки C#
Доброго времени суток! Разбираюсь с чтением информации из файла средствами c#. В общем, суть такова: лежит у меня ранее созданный в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru