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

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

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

Студворк — интернет-сервис помощи студентам
Есть квадратная матрица, которая заполняется данными из файла. Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами. Пытаюсь сделать так:
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2013, 02:59
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 2 минуты
Глупо сначала создавать массив, неизвестно под какое количество данных, а потом подсчитывать данне, которые нужно поместить в этот массив.
0
 Аватар для Кротяка
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 00:13  [ТС]
alsav22, размерность задаётся пользователем вводом с клавиатуры. Понимаю, что глупо, но того требует задание. Более того, повторюсь
Цитата Сообщение от Кротяка Посмотреть сообщение
Если размерность матрицы больше, чем объём данных в файле, то нужно заполнить недостающие элементы матрицы случайными числами
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 00:57
Цитата Сообщение от Кротяка Посмотреть сообщение
размерность задаётся пользователем вводом с клавиатуры
Я не об этом спросил. Код вы пишите, а не какой-то пользователь. Как напишите, так и будет. Текст задания полностью можно увидеть?
0
 Аватар для Кротяка
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 01:02  [ТС]
alsav22,
- Размер матрицы должен вводиться с клавиатуры;
- Под элементы матрицы выделить динамическую память требуемого размера.
- При формировании матриц предусмотреть выбор варианта: случайным образом, вводом с клавиатуры или вводом из файла;
- При выборе ввода матрицы с клавиатуры, должен быть предусмотрен удобный интерфейс ввода данных;
- При вводе из файла при недостаточном объеме данных элементы матрицы, для которых не хватило значений, заполняются случайными значениями;
- Сформированную матрицу необходимо отобразить на экране;
- Предусмотреть вывод промежуточных результатов и результатов обработки на экран и/или в файл.
- При выводе на экран выделять другим цветом элементы, удовлетворяющие условию обработки.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 01:03
При таком задании, нет смыла лишний раз файл читать для подсчёта данных. Нужно заполнение матрицы данными из файла так сделать, чтобы после заполнения было видно, по какому условию произошёл выход из цикла: закончились данные в файле или закончилась матрица. Если произошёл выход из-за того, что данных в файле меньше, чем размер матрицы, то тогда продолжить заполнение матрицы случайными числами.
0
 Аватар для Кротяка
7 / 7 / 1
Регистрация: 20.12.2010
Сообщений: 392
08.12.2013, 01:22  [ТС]
alsav22, а можно наглядно это увидеть? просто честно говоря уже башка не варит
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
08.12.2013, 02:30
Цитата Сообщение от Кротяка Посмотреть сообщение
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
Цитата Сообщение от 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
Цитата Сообщение от Кротяка Посмотреть сообщение
- При вводе из файла при недостаточном объеме данных элементы матрицы, для которых не хватило

значений, заполняются случайными значениями;
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  [ТС]
MrCold, спасибо большое. Ваш вариант очень помог.

Добавлено через 1 минуту
Цитата Сообщение от Alex5 Посмотреть сообщение
Последние символы файла могут быть пробелами. eof() вернёт false и мы попытаемся прочитать число, когда в файле остались одни пробелы. См.рис. ( В файле: "1111 2222 3333 " )
нужно просто в фигурные скобки добавить для циклов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.12.2013, 18:03
Помогаю со студенческими работами здесь

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

Считать матрицу из текстового файла
в текстовом файле дана матрица 4 9 5 5 9 2 9 2 9 как считать этот двумерный массив и вывести его на экран? подскажите плиз(c++)

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru