Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103

Считать содержимое файла в строковый массив

10.02.2015, 13:50. Показов 4325. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Я подсчитала кол-во строк в файле (переменная x). Далее создаю массив с подсчитанной размерностью.
C++
1
2
3
4
5
6
7
8
ifstream file ("1.txt");
string line;
int x = 0;
while (getline(file, line))
    {
        x++;
    }
string *mass = new string[x];
Как мне теперь добавить строки из этого файла в массив?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2015, 13:50
Ответы с готовыми решениями:

Строковый массив (объявить пустой глобальный строковый массив из 16 элементов)
Подскажите, как объявить пустой глобальный строковый массив из 16 элементов? в качестве элементов будут указаны пути к графическим...

Как попроще считать определённую строку из файла и присвоить её содержимое string переменной?
#include <iostream> #include <fstream> #include <windows.h> using namespace std; int main() { SetConsoleCP(1257); ...

Считать содержимое файла на экран, задерживая текст на экране до нажатия клавиши при полном заполнении экрана
Ребят помогите пожайлуста, сделал код по которому выводиться содержимое файла. Вот само условие: Дан текстовый файл. Считать...

30
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
10.02.2015, 13:54
Вторым точно таким же циклом.
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 13:59  [ТС]
Так не получается:
C++
1
2
3
4
    while (getline(file, line))
    {
        mass[line];
    }
И так тоже:
C++
1
2
int i = 0;
    while (!file.eof()) { file >> mass[i]; i++; }
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
10.02.2015, 14:13
А файл на начало Вы перемотали?
C++
1
 file.seekg( 0, ios_base::beg );
И потом
C++
1
2
3
4
char mass[50][100]; // не более 50 строк по 100 символов
int line=0;
while ( line<50 && (file.getline(mass[line],100))!=NULL  ) 
    line++;
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 14:44  [ТС]
Не работает.. Вообще ничего не понятно после c#..
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 14:48
Katya!, а Вы не хотите попробовать сразу их добавлять?
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 14:51  [ТС]
Дело в том, что я не знаю сколько строк будет в файле, поэтому я их считаю, чтобы указать размерность массива. Так делать правильно?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
10.02.2015, 14:53
Цитата Сообщение от Katya! Посмотреть сообщение
Дело в том, что я не знаю сколько строк будет в файле
C++
1
2
3
4
5
6
7
8
    std::ifstream file ("1.txt");
    std::string line;
    std::vector<std::string> mass;
 
    while (std::getline(file, line))
    {
        mass.push_back(line);
    }
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 14:53
Лучший ответ Сообщение было отмечено Katya! как решение

Решение

Katya!, для этого есть волшебный контейнер - вектор. Ему не обязательно изначально знать, сколько элементов в него положат. Пример.
C++
1
2
3
4
5
6
    std::vector<std::string> strings;
    std::ifstream file ("1.txt");
    std::string line;
    while(!std::getline(file, line).eof())
        strings.push_back(line);
    strings.push_back(line);
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
10.02.2015, 14:58
Тамика, DrOffset, человек практикуется в рукопашном добавлении строк в динамический массив. А вы ему контейнер.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 15:00
SatanaXIII, она же использует стринг! Числовой "аналог" - вектор. Не должно возникуть проблем.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
10.02.2015, 15:01
Цитата Сообщение от SatanaXIII Посмотреть сообщение
человек практикуется в рукопашном добавлении строк в динамический массив. А вы ему контейнер.
Не вижу проблем, это еще один вариант к уже написанным. Выберет что ей больше понравится.
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 15:10  [ТС]
Спасибо всем огромное. Действительно, вектор использовать удобнее, кода меньше.
А можно сравнивать векторы между собой? Например, если есть 2 вектора names и strings, можно ли каким то образом задать такое условие:

если в векторе names найдется строка из strings, то cout << "OK: "<< найденная_строка << endl;
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 15:11
Katya!, ровно так же, как и числа.
C++
1
if (names[i] == strings[i]) std::cout << "Ok: " << names[i] << "\n";
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 15:36  [ТС]
Это в цикле нужно перебрать? И какого типа должна быть переменная i?
C++
1
if (names[i] == strings[i]) std::cout << "Ok: " << names[i] << "\n";
Добавлено через 6 минут
Пробую вот так, но не получается:
C++
1
2
3
4
        for (int i=0; i<10; i++)
        {
            if (names[i] == strings[i]) cout << "Ok: " << names[i] << "\n";
        }
Добавлено через 7 минут
В векторе strings есть определенный список. И если строки из strings найдены в names - писать в консоль.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 15:48
Katya!, теперь еще раз конкретно задачу.
У Вас есть два вектора стрингов. Один - names , второй - strings. Так? И нужно найти какие из strings есть в names?
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 15:51  [ТС]
Почему подчеркивает знак == ?

Добавлено через 2 минуты
Да, правильно. Например в strings есть q1, q2, q3. А в names много всяких строк, и если строки из strings найдены в names, то вывести их в консоль.
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 15:51
Katya!, сбросьте код.
0
 Аватар для Katya!
3 / 3 / 4
Регистрация: 27.12.2009
Сообщений: 103
10.02.2015, 15:54  [ТС]
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
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <windows.h>
using namespace std;
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    std::vector<std::wstring>* names = (std::vector<std::wstring>*) lParam;
 
    if (IsWindowVisible(hwnd) && (!GetWindow(hwnd, GW_OWNER)))
    {
        wchar_t str[512] = { 0 };
        if (GetWindowTextW(hwnd, str, 511))
        {
            names->push_back(str);
        }
    }
 
    return 1;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    vector<string> strings;
    ifstream file ("config.cfg");
    string line;
    while (!std::getline(file, line).eof())
        strings.push_back(line);
    strings.push_back(line);
    file.close();
    copy(strings.begin(), strings.end(), ostream_iterator<string>(cout, "\n"));
 
        vector<wstring> names;
        EnumWindows(&EnumWindowsProc, (LPARAM)&names);
        ostream_iterator<std::wstring, wchar_t> out(wcout, L"\n");
        copy(names.begin(), names.end(), out);
 
        for (int i=0; i < names.size(); i++)
        {
            if (names[i] == strings[i]) cout << "Ok: " << names[i] << "\n";
        }
 
    system("pause");
    return 0;
}
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
10.02.2015, 15:58
C++
1
wstring
А зачем так? Почему не просто стринг?

Добавлено через 1 минуту
К тому же, здесь не совсем корректно. У Вас массивы names и strings одинакового размера? Если нет - то будет ошибка выхода за пределы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2015, 15:58
Помогаю со студенческими работами здесь

Нужно записать массив в файл, а потом из этого файла считать этот же массив
Помогите, пожалуйста, никогда с файлами делов не имела. Нужно записать массив в файл, а потом из этого файла считать этот же массив. ...

Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке).
Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге...

Считать массив А с файла a.txt. после чего сформировать массив С в котором все отрицательные элементы с масси
Помогите написать программу на C++. Изучала этот язык меньше пол года, пока есть проблемы. очень нужна ваша помощь Считать массив А с файла...

Считать с файла в массив
Подскажите, как считать посимвольно из файла в двумерный массив через fscanf? например в файле: ав сd и если посимвольно...

Считать из файла в массив
Добрый день форумчани, у меня маленькое недопонимание. В смысле я не могу считать из файла в МАССИВ, данный массив есть объектом главного...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru