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

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

Войти
Регистрация
Восстановить пароль
 
 
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
#1

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

18.10.2013, 14:18. Просмотров 945. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 14:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос размер считываемой строки из файла (C++):

Удвоить размер файла, записав в конец файла все его исходные элементы - C++
Дан файл целых чисел. Удвоить его размер, записав в конец файла все его исходные элементы (в том же порядке). Помогите пожалуйста!!!!

Добавлять в исходную строку заданной длины новые строки, пока не будет превышен размер исходной строки - C++
Описать строку из 50 символов. В цикле запрашивать у пользователя строки длиной до 10 символов и добавлять их к исходной до тех пор, пока...

Получить третий файл, содержащий чётные строки первого файла и нечётные строки второго файла - C++
Даны два файла, получить третий, содержащий чётные строки первого файла и нечётные строки второго файла. Вообще не имею понятия, как...

Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее - C++
Переделать головную функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки...

Размер строки - C++
Дается строка в одном файле. Допустим, data1.txt . Нужно найти длину строки и записать в другой файл( data2.txt). Хочется по простому, на...

Размер файла - C++
Добрый день , нужно получить размер файла мой код пишет что-то не внятное значение 1787408944 #include &lt;sys/stat.h&gt; ...

20
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:27 #2
Цитата Сообщение от dzrkot Посмотреть сообщение
есть ли функция, которая мне вернёт размер строки из файла?
Без чтения строки? Если только, при записи строки в файл, сначала записывать её размер.
0
SatanaXIII
Супер-модератор
Эксперт С++
5688 / 2743 / 258
Регистрация: 01.11.2011
Сообщений: 6,695
Завершенные тесты: 1
18.10.2013, 14:29 #3
Наверное сперва надо считать getline-ом строку и узнать ее размер. Без чтения наверное никак.
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:29 #4
Цитата Сообщение от dzrkot Посмотреть сообщение
Или придётся 2 раза считывать файл, 1ый раз в какой-нибудь буфер, считая символы
Не обязатльно файл, но строку прийдётся.
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
18.10.2013, 14:29  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Без чтения строки? Если только, при записи строки в файл, сначала записывать её размер.
понятно, значит 2 раза читать
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 14:30 #6
С размером файла проще, тут не нужно читать весь файл, через seekg() и tellg() можно узнать.
0
Croessmah
Ушел
13764 / 8014 / 923
Регистрация: 27.09.2012
Сообщений: 19,727
Записей в блоге: 3
Завершенные тесты: 1
18.10.2013, 14:30 #7
Цитата Сообщение от dzrkot Посмотреть сообщение
значит 2 раза читать
либо один раз, по символу или по нескольку символов, переодически перевыделяя память...
1
MrGluck
Модератор
Эксперт CЭксперт С++
7772 / 4808 / 747
Регистрация: 29.11.2010
Сообщений: 13,127
18.10.2013, 14:41 #8
Если хотите работать с char* и в файле более одной строки! то можно написать вариант "для лаб": создать достаточно большой массив, считать в него, узнать длину строки в нем, скопировать в требуемый. Либо считывать два раза.

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

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

Если что, считывание строки - std::getline.
dzrkot, советую проверять наличие открытого файла
0
Croessmah
Ушел
13764 / 8014 / 923
Регистрация: 27.09.2012
Сообщений: 19,727
Записей в блоге: 3
Завершенные тесты: 1
18.10.2013, 14:46 #9
Цитата Сообщение от MrGluck Посмотреть сообщение
представляю как этот монстр будет насиловать ОС
смотря как сделать
0
MrGluck
Модератор
Эксперт CЭксперт С++
7772 / 4808 / 747
Регистрация: 29.11.2010
Сообщений: 13,127
18.10.2013, 14:49 #10
Croessmah, постоянное перераспределение памяти это как туда-сюда, туда-сюда ....
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
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++;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7772 / 4808 / 747
Регистрация: 29.11.2010
Сообщений: 13,127
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;
}
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
18.10.2013, 15:01  [ТС] #13
Цитата Сообщение от MrGluck Посмотреть сообщение
зачем вам третий параметр? Используйте перегруженную версию с двумя параметрами и со взятием строки до '\n'
не очень понел...
там на самом деле file.getline(strArray,n,'\n'); я так понимаю что он переписывает до первого '\n'
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2013, 15:26 #14
Цитата Сообщение от dzrkot Посмотреть сообщение
там на самом деле file.getline(strArray,n,'\n');
Там, по-умолчанию, третий параметр '\n', поэтому писать его не обязательно.

Добавлено через 2 минуты
dzrkot, у вас задача, вообще, какая? И через что её можно делать? Есть ограничения?
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
18.10.2013, 15:48  [ТС] #15
Цитата Сообщение от alsav22 Посмотреть сообщение
Там, по-умолчанию, третий параметр '\n', поэтому писать его не обязательно.

Добавлено через 2 минуты
dzrkot, у вас задача, вообще, какая? И через что её можно делать? Есть ограничения?
в массив массивов char'ов записать из файла.txt строки, до '\n', после чего из выбранных строк у всех слов удалить первый символ
0
18.10.2013, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 15:48
Привет! Вот еще темы с ответами:

Размер файла - C++
Как узнать размер файла в Си++/Си? кроме функции GetFileSize

Размер файла - C++
Привет всем. мне нужно создать массив, в который будут считываться интовые значения из файла. для этого мне нужно знать размер этого файла....

Размер файла - C++
Скрипт, который находит размер всех файлов указанного типа на указанном диске.(можно и 1 файла) вот мне нада узнать размер D:\1.txt

размер файла - C++
Господа!!! прям проблема у меня. не могу получить размер файла через GetFileSize. #include&quot;windows.h&quot; int __stdcall WinMain(HINSTANCE...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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