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

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

07.12.2013, 02:59. Показов 2956. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть квадратная матрица, которая заполняется данными из файла. Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами. Пытаюсь сделать так:
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;
}
Предполагаю, что неправильно считывается длина строки. Вопрос: как правильно её считать? Чтобы условие задачи выполнялось
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2013, 02:59
Ответы с готовыми решениями:

Считать из текстового файла только определенные строки
считать из текстового файла например строки с 6 по 9, или с 3 по 19 и записать их в другой...

Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину
Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую...

Считать строку из файла и определить ее длину
Помогите составить программу. задача программы - Считать строку из файла и определить ее длину.

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

26
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 15:13 2
Вот это компилируется?
C++
1
int a = fs.getline;
Добавлено через 1 минуту
Данные в файле - это строка чисел, расположенных через пробел? Что вам длина такой строки скажет о количестве чисел в ней?
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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();
0
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
07.12.2013, 16:45  [ТС] 4
alsav22,
1) не компилируется
2) да, это матрица чисел, расположенных через пробел
3) я как раз и спрашиваю - как правильно задать условие "Если размерность матрицы больше, чем объём данных в файле", понимая, что
C++
1
if(s > a)
неверно

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

Добавлено через 2 минуты
После подсчёта не забудьте сделать:
C++
1
2
fs.clear();
fs.seekg(0);
1
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
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й строки
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 19:45 9
Цитата Сообщение от Кротяка Посмотреть сообщение
//если размерность массива больше размерности файла
Как это может быть, если создавать массив под размер данных в файле?
Цитата Сообщение от alsav22 Посмотреть сообщение
сначала подсчитал количество чисел в файле (не длину строки!), потом, под это количество, создал бы массив.
Добавлено через 2 минуты
И проверьте правильность подсчёта, там есть ньюансы выхода из цикла чтения.
0
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
07.12.2013, 20:22  [ТС] 10
Цитата Сообщение от alsav22 Посмотреть сообщение
Как это может быть, если создавать массив под размер данных в файле?
сначала задаётся размерность массива, только потом идёт считывание. И если число столбцов и строк массива больше, чем число столбцов и строк(чисел, без пробелов) в файле, то недостающие элементы должны заполниться рандомными значениями.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 20:31 11
Цитата Сообщение от Кротяка Посмотреть сообщение
сначала задаётся размерность массива,
Кем?

Добавлено через 2 минуты
Глупо сначала создавать массив, неизвестно под какое количество данных, а потом подсчитывать данне, которые нужно поместить в этот массив.
0
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 00:13  [ТС] 12
alsav22, размерность задаётся пользователем вводом с клавиатуры. Понимаю, что глупо, но того требует задание. Более того, повторюсь
Цитата Сообщение от Кротяка Посмотреть сообщение
Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 00:57 13
Цитата Сообщение от Кротяка Посмотреть сообщение
размерность задаётся пользователем вводом с клавиатуры
Я не об этом спросил. Код вы пишите, а не какой-то пользователь. Как напишите, так и будет. Текст задания полностью можно увидеть?
0
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 01:02  [ТС] 14
alsav22,
- Размер матрицы должен вводиться с клавиатуры;
- Под элементы матрицы выделить динамическую память требуемого размера.
- При формировании матриц предусмотреть выбор варианта: случайным образом, вводом с клавиатуры или вводом из файла;
- При выборе ввода матрицы с клавиатуры, должен быть предусмотрен удобный интерфейс ввода данных;
- При вводе из файла при недостаточном объеме данных элементы матрицы, для которых не хватило значений, заполняются случайными значениями;
- Сформированную матрицу необходимо отобразить на экране;
- Предусмотреть вывод промежуточных результатов и результатов обработки на экран и/или в файл.
- При выводе на экран выделять другим цветом элементы, удовлетворяющие условию обработки.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 01:03 15
При таком задании, нет смыла лишний раз файл читать для подсчёта данных. Нужно заполнение матрицы данными из файла так сделать, чтобы после заполнения было видно, по какому условию произошёл выход из цикла: закончились данные в файле или закончилась матрица. Если произошёл выход из-за того, что данных в файле меньше, чем размер матрицы, то тогда продолжить заполнение матрицы случайными числами.
0
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 01:22  [ТС] 16
alsav22, а можно наглядно это увидеть? просто честно говоря уже башка не варит
0
873 / 771 / 173
Регистрация: 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");
}
2
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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 " )
Миниатюры
Считать длину строки текстового файла  
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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]; 
        }
2
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
09.12.2013, 18:03  [ТС] 20
MrCold, спасибо большое. Ваш вариант очень помог.

Добавлено через 1 минуту
Цитата Сообщение от Alex5 Посмотреть сообщение
Последние символы файла могут быть пробелами. eof() вернёт false и мы попытаемся прочитать число, когда в файле остались одни пробелы. См.рис. ( В файле: "1111 2222 3333 " )
нужно просто в фигурные скобки добавить для циклов
0
09.12.2013, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2013, 18:03
Помогаю со студенческими работами здесь

Считать матрицу из текстового файла
в текстовом файле дана матрица 4 9 5 5 9 2 9 2 9 как считать этот двумерный массив и вывести...

Как считать информацию с текстового файла?
Нужна помощь! Мне необходимо создать пользовательскую функцию, которая будет считывать информацию с...

Считать данные текстового файла в массив
Здравствуйте знатоки. Есть файл file.txt в котором содержатся числа например массив из 5 символов...

Считать из текстового файла предложения в односвязный список
Считать из текстового файла предложения в односвязный список. Переставить в первых и последних...


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

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