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

Считать длину строки текстового файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
07.12.2013, 02:59     Считать длину строки текстового файла #1
Есть квадратная матрица, которая заполняется данными из файла. Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами. Пытаюсь сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
cout<<"Введите размерность квадартной матрицы: ";
cin>>s;
int **mas = new int*[s];
 
ifstream fs;
fs.open("input.txt");
int a = fs.getline;
 
if(s > a){
    for(i = a + 1; i < s; i++)
        for(j = a + 1; j < s; j++)
            mas[i][j] = rand() % 19 - 9;
}
Предполагаю, что неправильно считывается длина строки. Вопрос: как правильно её считать? Чтобы условие задачи выполнялось
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 15:13     Считать длину строки текстового файла #2
Вот это компилируется?
C++
1
int a = fs.getline;
Добавлено через 1 минуту
Данные в файле - это строка чисел, расположенных через пробел? Что вам длина такой строки скажет о количестве чисел в ней?
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
07.12.2013, 16:21     Считать длину строки текстового файла #3
Цитата Сообщение от Кротяка Посмотреть сообщение
заполняется данными из файла
C++
1
2
3
4
5
6
7
8
9
10
11
    ifstream fs;
    fs.open("input.txt");
 
    // читаем числа из файла 
    int n;
    while( fs >> n )
    {
        cout << n << endl;
    }
 
    fs.close();
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
07.12.2013, 16:45  [ТС]     Считать длину строки текстового файла #4
alsav22,
1) не компилируется
2) да, это матрица чисел, расположенных через пробел
3) я как раз и спрашиваю - как правильно задать условие "Если размерность матрицы больше, чем объём данных в файле", понимая, что
C++
1
if(s > a)
неверно

Добавлено через 59 секунд
Alex5, это я и сам давным давно сделал
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 16:49     Считать длину строки текстового файла #5
Цитата Сообщение от Кротяка Посмотреть сообщение
3) я как раз и спрашиваю - как правильно задать условие "Если размерность матрицы больше, чем объём данных в файле", понимая, что
Я бы так сделал: сначала подсчитал количество чисел в файле (не длину строки!), потом, под это количество, создал бы массив.
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
07.12.2013, 17:07  [ТС]     Считать длину строки текстового файла #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Я бы так сделал: сначала подсчитал количество чисел в файле (не длину строки!)
не подскажите, как это сделать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 17:11     Считать длину строки текстового файла #7
Через fs >> читайте и считайте.

Добавлено через 2 минуты
После подсчёта не забудьте сделать:
C++
1
2
fs.clear();
fs.seekg(0);
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
07.12.2013, 19:36  [ТС]     Считать длину строки текстового файла #8
вобщем сделал так, работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//считаем количество чисел в строке
            count = 0;
 
            while(fs>>a)
                count = count + 1;
            count = sqrt(count);
            cout<<count<<endl;
 
            fs.clear();
            fs.seekg(0);
 
//если размерность массива больше размерности файла
            if(s > count){
                for(i = 0; i < count; i++)
                    for(j = 0; j < count; j++)
                        fs>>mas[i][j];
                
                for(i = 0; i < s; i++)
                    for(j = 0; j < s; j++)
                        if(mas[i][j] == -842150451)
                            mas[i][j] = rand() % 19 - 9;
            }
но написано немного криво, и хотелось бы это исправить. Это касается 20й строки
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 19:45     Считать длину строки текстового файла #9
Цитата Сообщение от Кротяка Посмотреть сообщение
//если размерность массива больше размерности файла
Как это может быть, если создавать массив под размер данных в файле?
Цитата Сообщение от alsav22 Посмотреть сообщение
сначала подсчитал количество чисел в файле (не длину строки!), потом, под это количество, создал бы массив.
Добавлено через 2 минуты
И проверьте правильность подсчёта, там есть ньюансы выхода из цикла чтения.
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
07.12.2013, 20:22  [ТС]     Считать длину строки текстового файла #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Как это может быть, если создавать массив под размер данных в файле?
сначала задаётся размерность массива, только потом идёт считывание. И если число столбцов и строк массива больше, чем число столбцов и строк(чисел, без пробелов) в файле, то недостающие элементы должны заполниться рандомными значениями.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 20:31     Считать длину строки текстового файла #11
Цитата Сообщение от Кротяка Посмотреть сообщение
сначала задаётся размерность массива,
Кем?

Добавлено через 2 минуты
Глупо сначала создавать массив, неизвестно под какое количество данных, а потом подсчитывать данне, которые нужно поместить в этот массив.
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
08.12.2013, 00:13  [ТС]     Считать длину строки текстового файла #12
alsav22, размерность задаётся пользователем вводом с клавиатуры. Понимаю, что глупо, но того требует задание. Более того, повторюсь
Цитата Сообщение от Кротяка Посмотреть сообщение
Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 00:57     Считать длину строки текстового файла #13
Цитата Сообщение от Кротяка Посмотреть сообщение
размерность задаётся пользователем вводом с клавиатуры
Я не об этом спросил. Код вы пишите, а не какой-то пользователь. Как напишите, так и будет. Текст задания полностью можно увидеть?
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
08.12.2013, 01:02  [ТС]     Считать длину строки текстового файла #14
alsav22,
- Размер матрицы должен вводиться с клавиатуры;
- Под элементы матрицы выделить динамическую память требуемого размера.
- При формировании матриц предусмотреть выбор варианта: случайным образом, вводом с клавиатуры или вводом из файла;
- При выборе ввода матрицы с клавиатуры, должен быть предусмотрен удобный интерфейс ввода данных;
- При вводе из файла при недостаточном объеме данных элементы матрицы, для которых не хватило значений, заполняются случайными значениями;
- Сформированную матрицу необходимо отобразить на экране;
- Предусмотреть вывод промежуточных результатов и результатов обработки на экран и/или в файл.
- При выводе на экран выделять другим цветом элементы, удовлетворяющие условию обработки.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 01:03     Считать длину строки текстового файла #15
При таком задании, нет смыла лишний раз файл читать для подсчёта данных. Нужно заполнение матрицы данными из файла так сделать, чтобы после заполнения было видно, по какому условию произошёл выход из цикла: закончились данные в файле или закончилась матрица. Если произошёл выход из-за того, что данных в файле меньше, чем размер матрицы, то тогда продолжить заполнение матрицы случайными числами.
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
08.12.2013, 01:22  [ТС]     Считать длину строки текстового файла #16
alsav22, а можно наглядно это увидеть? просто честно говоря уже башка не варит
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
08.12.2013, 02:30     Считать длину строки текстового файла #17
Цитата Сообщение от Кротяка Посмотреть сообщение
alsav22, а можно наглядно это увидеть? просто честно говоря уже башка не варит
Этож просто
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
#include <iostream>
#include <ctime>
#include <fstream>
 
int main()
{
    srand(time(NULL));
    std::ifstream infile("File.txt");
    int **arr, M , N;
    std::cin >> M >> N;
 
 
    arr = new int*[M];
    for( int i = 0; i < M; i++)
    arr[i] = new int[N];
 
 
    for( int i = 0; i < M; i++)
        for( int j = 0; j < N; j++)             
            if( ! infile.eof())
              infile >> arr[i][j];
            else
              arr[i][j] = rand() % 100 + 1;
 
 
            for( int i = 0; i < M; i++)
            {
               std::cout  << std::endl;
             for( int j = 0; j < N; j++)
               std::cout << arr[i][j] << ' ';
            }
 
 
    for(int i = 0; i < M; ++i) 
    delete [] arr[i];
     delete [] arr;
     system("pause");
}
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
08.12.2013, 14:54     Считать длину строки текстового файла #18
Цитата Сообщение от MrCold Посмотреть сообщение
C++
1
2
3
4
5
6
for( int i = 0; i < M; i++)
 for( int j = 0; j < N; j++) 
 if( ! infile.eof())
 infile >> arr[i][j];
 else
 arr[i][j] = rand() % 100 + 1;
Последние символы файла могут быть пробелами. eof() вернёт false и мы попытаемся прочитать число, когда в файле остались одни пробелы. См.рис. ( В файле: "1111 2222 3333 " )
Миниатюры
Считать длину строки текстового файла  
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
08.12.2013, 15:18     Считать длину строки текстового файла #19
Цитата Сообщение от Кротяка Посмотреть сообщение
- При вводе из файла при недостаточном объеме данных элементы матрицы, для которых не хватило

значений, заполняются случайными значениями;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    for( i ... )
        for( j ... )             
        {
            if( ! ( fs >> arr[i][j] ) )
            {
                /* если не удалось прочитать из файла 
                ( например, потому что файл закончился ), 
                то запишем случайное число */
                arr[i][j] = rand();
            }
 
            //cout << "    " << arr[i][j]; 
        }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 18:03     Считать длину строки текстового файла
Еще ссылки по теме:

Из текстового файла считать матрицу и записать ее в бинарный файл C++
Как считать информацию с текстового файла? C++
C++ Из текстового файла считать массив целых чисел

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

Или воспользуйтесь поиском по форуму:
Кротяка
 Аватар для Кротяка
5 / 5 / 0
Регистрация: 20.12.2010
Сообщений: 370
09.12.2013, 18:03  [ТС]     Считать длину строки текстового файла #20
MrCold, спасибо большое. Ваш вариант очень помог.

Добавлено через 1 минуту
Цитата Сообщение от Alex5 Посмотреть сообщение
Последние символы файла могут быть пробелами. eof() вернёт false и мы попытаемся прочитать число, когда в файле остались одни пробелы. См.рис. ( В файле: "1111 2222 3333 " )
нужно просто в фигурные скобки добавить для циклов
Yandex
Объявления
09.12.2013, 18:03     Считать длину строки текстового файла
Ответ Создать тему
Опции темы

Текущее время: 09:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru