С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
1

Из файла в разные массивы

01.06.2015, 20:05. Показов 1140. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть файл в котором в первой строке записано предложение, а во второй числа, нужно что бы предложение записалось в символьный массив, а числа в целочисленный соответственно. У меня была идея реализовать чтение до конца строки в один, а другой строки и до конца файла в другой, но реализовать не получается. getline позволяет взять всю строку, но как ее потом разбить на отдельные элементы не нашел.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2015, 20:05
Ответы с готовыми решениями:

Чтение слов и чисел из файла в разные массивы
Подскажите, в файле записаны числа и слова через пробелы. Надо считать слова в один массив, а числа...

Разные рандомные массивы
Необходимо создать 2 метода с разным типом генерации рандомных массивов. Первый генерирует такой...

Одномерные массивы.Найти разные элементы.
Помогите, пожалуйста!))) С помощью процедур... 1) Даны два одномерных массива из целых чисел....

Переписать четные и нечетные элементы в разные массивы
Доброго времени суток, нужна ваша помощь. Дали в университете задание: Массив Х содержит 30 целых...

3
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
01.06.2015, 20:13 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
stringstream second(s);  // s — та строка, которую надо разбить
// теперь second обычный поток и с ним можно работать так же как и с остальными потоками
// Например:
vector<int> mass;
while (second) {
  int tmp;
  second >> tmp;
  mass.push_back(tmp);
}
// или то же самое в одну строчку
vector<int> mass( (istream_iterator<int>(second)), istream_iterator<int>());
// скобки у первого аргумента конструктора вектора обязательны, иначе это будет воспринято как объявление функции
1
9 / 9 / 6
Регистрация: 16.10.2011
Сообщений: 423
01.06.2015, 23:54  [ТС] 3
Кажется я не совсем понял, можно на примере показать? Допустим есть in.txt, в нем первая строка a b c d, и вторая строка 1 22 3 4 должен получится массив типа char {a, b, c, d} и массив типа int {1, 22, 3, 4}

Добавлено через 7 минут
Я думал может можно как то поставить условие на тип, в смысле "если переменная относится к целочисленному типу то записать туда то". Или указывать размер массива заранее в файле с использованием динамического массива

Добавлено через 8 минут
C++
1
2
3
4
    ifstream in("in.txt");
    int n; in >> n;
    char *g = new char[n];  for (int i = 0; i < n; i++)in >> g[i];
    int *key = new int[n];  for (int i = 0; i < n; i++)in >> key[i];
Сделал так, единственное что некрасиво получилось первое число в первой строке должно показывать размер массива, то есть кол-во символов в первой и второй строке.
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
02.06.2015, 00:15 4
Лучший ответ Сообщение было отмечено serega006 как решение

Решение

Цитата Сообщение от serega006 Посмотреть сообщение
Кажется я не совсем понял, можно на примере показать? Допустим есть in.txt, в нем первая строка a b c d, и вторая строка 1 22 3 4 должен получится массив типа char {a, b, c, d} и массив типа int {1, 22, 3, 4}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <iterator>
#include <string>
#include <sstream>
#include <vector>
 
int main() {
    using namespace std;
    ifstream file("in.txt");
    string line;
    getline(file, line);
    istringstream first(line);
    vector<char> symbols((istream_iterator<char>(first)), istream_iterator<char>());
    getline(file, line);
    istringstream second(line);
    vector<int> integers((istream_iterator<int>(second)), istream_iterator<int>());
    // ...
}
Цитата Сообщение от serega006 Посмотреть сообщение
Я думал может можно как то поставить условие на тип, в смысле "если переменная относится к целочисленному типу то записать туда то".
Это можно сделать с помощью шаблонов. Например, так можно избежать дублирования кода
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
#include <fstream>
#include <iterator>
#include <string>
#include <sstream>
#include <vector>
 
template <typename T>
void get_information(std::istream& in, std::vector<T>& array) {
    using namespace std;
    string line;
    getline(in, line);
    istringstream stream(line);
    array.assign(istream_iterator<T>(stream), istream_iterator<T>());
}
 
 
int main() {
    using namespace std;
    ifstream file("in.txt");
    vector<char> symbols;
    get_information(file, symbols);
    vector<int> integers;
    get_information(file, integers);
    // ...
}
Цитата Сообщение от serega006 Посмотреть сообщение
Или указывать размер массива заранее в файле с использованием динамического массива
Все мои примеры не трубуют указания в файле количества элементов в массиве — так безопаснее. В реальности vector — это динамический массив. Когда читаются элементы из файла, чтобы их сохранить в такой массив, он изменяет свой размер. Тут надо быть внимательным, т.к. если места для расширения массива не хватает, то выделяется память в новом месте, все элементы со старого места копируются на новое, а затем старые уничтожаются. Это называется memory reallocation. Если хочется таких копирований избежать, то следует использовать список или какие-нибудь другие техники.
1
02.06.2015, 00:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 00:15
Помогаю со студенческими работами здесь

Программа сортирующая точки координат в разные массивы
Нужно написать программу, которая принимает 3 параметра через командную строку. Первый параметр:...

Переписать положительные и отрицательные элементы в разные массивы
Составить программу, записывающую все положительные элементы двумерного массива А в одномерный...

Переместить в разные массивы четные и нечетные элементы матрицы
#include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { int Matr, i,...

Записать отрицательные и положительные элементы массива в разные массивы
Дан массив М. Нужно все отрицательные элементы массива М записать в массив МО, а положительные — в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru