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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
#1

Из одного файла данных получить два массива (один с числами, другой - с буквами) - C++

01.12.2012, 01:04. Просмотров 555. Ответов 5
Метки нет (Все метки)

Имеется файл данных, где первая колонка - буквы, а остальные три колонки - числа.
Надо записать буквы в один массив, а числа - в другой (желательно, чтобы матрица чисел имела тот же вид, что и в .dat файле).

В программировании я полный ноль (ну то есть совсем без палочки), так что не знаю, как быть.
Прочитала, что есть такая штука, как isalpha (а ещё есть isdigit), но как их применить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double coord[at][xyz];   //массив чисел
       char name[at];         //массив имён
       ifstream f("coord2.dat"); //ввод данных из файла.
       if(isalpha(f))         //а вот тут я думала сделать проверку. 
//Если вводимое f - это буква латинского алфавита, то пускай она записывается в массив букв, 
//а если не буква - то пусть идёт в массив чисел.
//Но не прокатило: оно даже не хочет компилироваться :(
           for (int h=0; h<at; h++)
           f >> name[h];
       else    
              for (int i=0; i<xyz; i++) 
                     for (int j=0; j<at; j++)
                       f >> coord[j][i];
Буду благодарна за любой совет.
В принципе, реализация не важна, важен только результат, так что для отбора данных можно использовать не только критерий "буква - не буква", но и "первый символ в строке - остальные".
Хотя, конечно, узнать, как тут применяется isalpha, интересно...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 01:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из одного файла данных получить два массива (один с числами, другой - с буквами) (C++):

Из одного массива сделать два массива, в один перенести четные элементы, в другой нечетные - C++
Здравствуйте , помогите пожалуйста с такой задачей из одного массива сделать два массива, в один перенести четные елементы, в другой...

Создать на основе одного массива два других: один с числами кратными 2, второй - с кратными 3 - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int main() { int a, i, j, n = 7,k=7; cout &lt;&lt; &quot;Vvedite massiv:&quot;; ...

Функция вставляющая элементы одного массива в другой через один - C++
Добрый вечер форум:) Подскажите пожалуйста сдавал зачет по по инфе,на теорию то ответил))Скажите что тут нужно было сделать в 3 задании,а...

Как в проэкт запихать два срр-файла (один вызывает другой) - C++
Тело ф-ии в одном .срр а Маin в другом .срр как это сделать?? Есть проэкт. в папке Source files два срр-шника. Функция в одном а...

Записать два элемента одного массива, как один элемент другого - C++
Здравствуйте) есть такое задание: нужно составить таблицу истинности(дискретная математика). И в процессе выполнения нужно записать...

Даны два массива А и В с действительными числами. Получить матрицу С - C++
даны два массива А и В с действительными числами. Получить матрицу С, элементы которой равны Cij=aj/(bj+5) C++/ массивы

5
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.12.2012, 01:55 #2
C++
1
2
for (int i = 0; i < at; ++i)
   f >> name[i] >> coord[i][0] >> coord[i][1] >> coord[i][2];
1
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,019
01.12.2012, 02:10 #3
Постарался попроще
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
#include <iostream>
#include <cstdlib> // includes std::atoi
#include <fstream>
#include <cctype>
#include <vector>
#include <string>
 
bool isInt(const std::string &s)
{
    for (std::size_t i=0; i < s.size(); i++)
        if (isalpha (s[i])) return false;
        // if (!isdigit (s[i])) return false // по аналогии
    return true;
}
 
int main()
{
    std::ifstream ifs("test.dat");
    if (!ifs)
    {
        std::cerr<< "No such file\n";
        return 1;
    }
    std::string buf; // сюда считываем очередное "слово"
    std::vector<int> integers;
    std::vector<std::string> characters;
    while (!ifs.eof() && ifs>> buf) // пока не конец файла и удалось считать
    {
        if (isInt (buf)) integers.push_back(std::atoi (buf.c_str()));
        else characters.push_back(buf);
    }
    std::cout<< "Integers: ";
    for (std::vector<int>::iterator it = integers.begin(); it != integers.end(); ++it)
        std::cout<< *it<< " ";
    std::cout<< "\nCharacters: ";
    for (std::vector<std::string>::iterator it = characters.begin(); it != characters.end(); ++it)
        std::cout<< *it<< " ";
    return 0;
}
1
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
01.12.2012, 12:22  [ТС] #4
I.M., MrGluck, благодарю!
MrGluck, идея с функцией bool isInt ясна, спасибо
А вот что делать, если числа типа double? У меня там по 9 знаков после запятой
Заменила в векторах int на double - не помогло. Всё равно выводит целые числа. Или, может, эта push_back так устроена, что добавляет только целые?..
0
igorrr37
1647 / 1275 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
01.12.2012, 12:26 #5
это atoi так устроена, попробуй strtod
http://www.cplusplus.com/reference/cstdlib/strtod/
1
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,019
01.12.2012, 14:13 #6
Molchunja, std::atof

Добавлено через 2 минуты
Есть еще вариант С++11 http://en.cppreference.com/w/cpp/str...ic_string/stof
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 14:13
Привет! Вот еще темы с ответами:

Перенос данных из одного файла в другой - C++
День добрый! Помогите решить задачу! Условие: &quot;Сформировать файл, содержащий записи по результатам сдачи очередного экзамена...

Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы - C++
Написать программу , которая вводит с клавиатуры массив из N вещественных чисел , создает два новых массива , в один из которых помещает...

Неправильная передача данных из одного файла в другой - C++
Здравствуйте! Возникли проблемы с записью информации в файл. Часть кода: unsigned char bady, text, tx_bt; FILE *fp_in,...

Копирование данных из одного массива в другой - C++
Написать программу, в которой создаются два массива типа char. В одном из массивов должен быть любой инициализированный текст, а в...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
01.12.2012, 14:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru