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

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

Войти
Регистрация
Восстановить пароль
 
 
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
#1

размер считываемой строки из файла - C++

18.10.2013, 14:18. Просмотров 799. Ответов 20
Метки нет (Все метки)

открываю файл, пытаюсь считать строку в массив, массив через char* a=new char[n], есть ли функция, которая мне вернёт размер строки из файла? Или придётся 2 раза считывать файл, 1ый раз в какой-нибудь буфер, считая символы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int n;
ifstream file;
file.open("text.txt");
n = //??
char* strArray=new char[n];
 
//дальше мой кодъ!
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 14:18     размер считываемой строки из файла
Посмотрите здесь:
Удвоить размер файла, записав в конец файла все его исходные элементы C++
C++ Добавлять в исходную строку заданной длины новые строки, пока не будет превышен размер исходной строки
C++ Получить третий файл, содержащий чётные строки первого файла и нечётные строки второго файла
C++ Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
Размер строки C++
Размер файла C++
Размер файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:27     размер считываемой строки из файла #2
Цитата Сообщение от dzrkot Посмотреть сообщение
есть ли функция, которая мне вернёт размер строки из файла?
Без чтения строки? Если только, при записи строки в файл, сначала записывать её размер.
SatanaXIII
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 1
18.10.2013, 14:29     размер считываемой строки из файла #3
Наверное сперва надо считать getline-ом строку и узнать ее размер. Без чтения наверное никак.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:29     размер считываемой строки из файла #4
Цитата Сообщение от dzrkot Посмотреть сообщение
Или придётся 2 раза считывать файл, 1ый раз в какой-нибудь буфер, считая символы
Не обязатльно файл, но строку прийдётся.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
18.10.2013, 14:29  [ТС]     размер считываемой строки из файла #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Без чтения строки? Если только, при записи строки в файл, сначала записывать её размер.
понятно, значит 2 раза читать
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:30     размер считываемой строки из файла #6
С размером файла проще, тут не нужно читать весь файл, через seekg() и tellg() можно узнать.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
18.10.2013, 14:30     размер считываемой строки из файла #7
Цитата Сообщение от dzrkot Посмотреть сообщение
значит 2 раза читать
либо один раз, по символу или по нескольку символов, переодически перевыделяя память...
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
18.10.2013, 14:41     размер считываемой строки из файла #8
Если хотите работать с char* и в файле более одной строки! то можно написать вариант "для лаб": создать достаточно большой массив, считать в него, узнать длину строки в нем, скопировать в требуемый. Либо считывать два раза.

А вообще std::string и не надо извращаться.

Цитата Сообщение от Croessmah Посмотреть сообщение
либо один раз, по символу или по нескольку символов, переодически перевыделяя память...
представляю как этот монстр будет насиловать ОС

Если что, считывание строки - std::getline.
dzrkot, советую проверять наличие открытого файла
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
18.10.2013, 14:46     размер считываемой строки из файла #9
Цитата Сообщение от MrGluck Посмотреть сообщение
представляю как этот монстр будет насиловать ОС
смотря как сделать
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
18.10.2013, 14:49     размер считываемой строки из файла #10
Croessmah, постоянное перераспределение памяти это как туда-сюда, туда-сюда ....
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
18.10.2013, 14:55  [ТС]     размер считываемой строки из файла #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Если хотите работать с char* и в файле более одной строки! то можно написать вариант "для лаб": создать достаточно большой массив, считать в него, узнать длину строки в нем, скопировать в требуемый. Либо считывать два раза.
Если что, считывание строки - std::getline.
dzrkot, советую проверять наличие открытого файла
ну первоначально я и сделал новый массив, file.getline(strArray,n,'\0');
но так ведь придётся потом перебирать массив до '\n', считая символы, потом выделять под строку другой массив.

Я делал через string уже такую прогу(я её ток потерял где-то на компе), и там в двумерном массиве хранил эти строки, и тогда 2 раза читал файл.
Просто стал делать для char, и выяснилось что он пропускает пробелы и '\n', и вот я что-то залип на этом месте и как посчитать длинну строки не понимаю)))
C++
1
2
3
4
5
while(!file.eof())
{
file>> arrayStr[i];
i++;
}
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
18.10.2013, 15:00     размер считываемой строки из файла #12
Цитата Сообщение от dzrkot Посмотреть сообщение
file.getline(strArray,n,'\0');
зачем вам третий параметр? Используйте перегруженную версию с двумя параметрами и со взятием строки до '\n'

Добавлено через 1 минуту
Пример работы с массивом строк на С. Считывание идет также до '\n' но со стандартного потока, поменять легко.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*Напечатать те слова, которые отличаются только порядком следования букв. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int compare (const void *, const void *);
int equalChars(char **, const size_t, const char *);
    
int main(void)
{
    char str[256], **words = NULL, **sortWords = NULL, *p = NULL;
    size_t i, len, numWords = 1;
    if (fgets(str, sizeof(str), stdin) == NULL || strlen(str) == 1)
        return 1;
    len = strlen(str);
    str[len - 1] = '\0';
    for (i=0; i < len; i++)
        if (str[i] == ' ')
            numWords++;
    if ((words     = (char **)malloc (sizeof(char *) * numWords)) == NULL ||
        (sortWords = (char **)malloc (sizeof(char *) * numWords)) == NULL)
        return 2;
    i = 0;
    for (p = strtok(str, " "); p != NULL; p = strtok(NULL, " "))
    {
        if ((words[i]     = strdup(p)) == NULL || 
            (sortWords[i] = strdup(p)) == NULL)
            return 3;
        qsort(sortWords[i], strlen(sortWords[i]), sizeof(char), compare);
        i++;
    }
    
    for (i = 0; i < numWords; i++)
        if (equalChars(sortWords, numWords, words[i]))
            printf("%s\n", words[i]);
    
    for (i = 0; i < numWords; i++)
    {
        free(words[i]);
        free(sortWords[i]);
    }
    free(words);
    free(sortWords);
    free(p);
    return 0;
}
 
int compare (const void *a, const void *b)
{
    return *(char *)a - *(char *)b;
}
 
int equalChars(char **words, const size_t num, const char *word)
{
    size_t i, j;
    char *tmp = strdup(word);
    qsort(tmp, strlen(tmp), sizeof(char), compare);
    for (i=0; i < num-1; i++)
        if (strcmp(words[i], tmp) == 0)
            for (j=i+1; j < num; j++)
                if (strcmp(words[j], tmp) == 0)
                {
                    free(tmp);
                    return 1;
                }
    free(tmp);
    return 0;
}
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
18.10.2013, 15:01  [ТС]     размер считываемой строки из файла #13
Цитата Сообщение от MrGluck Посмотреть сообщение
зачем вам третий параметр? Используйте перегруженную версию с двумя параметрами и со взятием строки до '\n'
не очень понел...
там на самом деле file.getline(strArray,n,'\n'); я так понимаю что он переписывает до первого '\n'
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 15:26     размер считываемой строки из файла #14
Цитата Сообщение от dzrkot Посмотреть сообщение
там на самом деле file.getline(strArray,n,'\n');
Там, по-умолчанию, третий параметр '\n', поэтому писать его не обязательно.

Добавлено через 2 минуты
dzrkot, у вас задача, вообще, какая? И через что её можно делать? Есть ограничения?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 15:48     размер считываемой строки из файла
Еще ссылки по теме:
C++ размер файла
Размер файла... C++
C++ Размер строки указателя
C++ Узнать размер файла

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
18.10.2013, 15:48  [ТС]     размер считываемой строки из файла #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Там, по-умолчанию, третий параметр '\n', поэтому писать его не обязательно.

Добавлено через 2 минуты
dzrkot, у вас задача, вообще, какая? И через что её можно делать? Есть ограничения?
в массив массивов char'ов записать из файла.txt строки, до '\n', после чего из выбранных строк у всех слов удалить первый символ
Yandex
Объявления
18.10.2013, 15:48     размер считываемой строки из файла
Ответ Создать тему
Опции темы

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