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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.68
Novij
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
#1

Подсчитать количество символов в файле - C++

11.12.2011, 17:05. Просмотров 12707. Ответов 31
Метки нет (Все метки)

Функция while(f.eof()) насколько я помню обозначает сделать то то пока не будет конец файла. Я ввел счетчик ,что бы узнать сколько символов в файле. Который час пробую разные варианты. Подскажите функцию что бы определить количество символов.



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
int _tmain(int argc, _TCHAR* argv[])
{
    char a[10];
    int k=0;
    ifstream f("siz.txt");
    if(!f)
    {
        cout<<"can't open file \n";
    }
    else
    {
        cout<<"open file\n";
        while(!f.eof())
        {
            int k=0;
            for(int i=0;i<10;i++)
                k=i;
                
        };
        cout<<k;
    }
 
 
    system("PAUSE");
    return 0;
}
вопрос почему считает что в тестовом документе 0 символов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 17:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчитать количество символов в файле (C++):

Подсчитать количество символов в файле - C++
Здравствуйте, Имеется такая задачка : 1)Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию Выполнить...

Подсчитать количество символов в файле - C++
Подсчитать количество символов в файле. Символы с кодами ≤ 32, управляющие и пробелы не считать. Результат вывести на экран. ...

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

Подсчитать количество символов в последнем слове в файле - C++
1) Создать текстовый файл F1 не менее, чем из 10 строк и записать в него информацию 2) Скопировать из файла F1 в файл F2 строки,...

Дан текст, содержащий 30 символов. Подсчитать количество вхождений символов А и Б. - C++
Ребят , помогите плиз , послезавтра экзамен , вот нашел возможные задание , может кто подсказать , или показать решения ? Язык : С++/...

В последовательности символов подсчитать количество букв и количество цифр - C++
Всем Добрый Вечер!!!Помогите пожалуйста тупенькому =), очень надо. Заранее спс... 1. В последовательности символов подсчитать...

31
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.12.2011, 12:30 #16
Цитата Сообщение от fasked Посмотреть сообщение
Главное вовремя уловить разницу между размером файла в байтах и длиной текстового файла (количество печатных символов).
Вот-вот, об этом я и говорю. Если в тексте нужно подсчитать количество отображаемых символов, то придется по нему пробежаться.

Добавлено через 52 секунды
Цитата Сообщение от alkagolik Посмотреть сообщение
конечно будем. Учитывать как sizeof(char)
тогда конструкция fseek() и ftell() не пройдут. Поэтому вариант от Jupiter как раз подойдет. Либо в Си

C
1
2
while (fgetc(f) != EOF)
   count++;
0
alkagolik
Заблокирован
14.12.2011, 12:32 #17
fgets(), strlen() - {2,1}
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.12.2011, 12:35 #18
Цитата Сообщение от alkagolik Посмотреть сообщение
fgets(), strlen() - {2,1}
Что означает сия запись?)
0
alkagolik
Заблокирован
14.12.2011, 12:40 #19
Thinker, вендовые текстовые файлы в конце каждй строки содержат 2 управляющих символа, юниксовые - 1.
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2011, 12:44 #20
Thinker, за два конечно, мы определяем размер файла в байтах

Цитата Сообщение от fasked Посмотреть сообщение
Главное вовремя уловить разницу между размером файла в байтах и длиной текстового файла (количество печатных символов).
Как известно, один символ занимает 1 байт памяти, соответственно размер файла = кол-во символов
А считать или не считать управляющие символы автор темы не оговаривал

Добавлено через 2 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
вендовые текстовые файлы в конце каждй строки содержат 2 управляющих символа,
Вы имеете ввиду 0x0d и 0x0a ?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
while (fgetc(f) != EOF)
* *count++;
Ведь тоже символ '\n' за два символа посчитаем

0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.12.2011, 12:45 #21
Цитата Сообщение от go Посмотреть сообщение

Не по теме:


Ведь тоже символ '\n' за два символа посчитаем

Не по теме:

Почему? за 1 символ

0
alkagolik
Заблокирован
14.12.2011, 12:48 #22
угу 5 букв

Добавлено через 1 минуту
Цитата Сообщение от go Посмотреть сообщение
Ведь тоже символ '\n' за два символа посчитаем
это еще почему?
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.12.2011, 12:54 #23
В Linux за два, в Windows за один.
1
go
14.12.2011, 13:02
  #24

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
это еще почему?
Странно это все...

Цитата Сообщение от Thinker Посмотреть сообщение
Правда?
Не знаю

0
alkagolik
Заблокирован
14.12.2011, 13:07 #25
Цитата Сообщение от fasked Посмотреть сообщение
В Linux за два, в Windows за один
Код
deadman@desktop:~$ cat > file.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main(void)
{
    FILE * fp;
    char * line = NULL;
    int cnt = 0;
    size_t len = 0;
    ssize_t read;

    fp = fopen("/home/deadman/file.txt", "r");
    if (fp == NULL)
        exit(EXIT_FAILURE);

    while ((read = getline(&line, &len, fp)) != -1)
    {
        printf("%s", line);
        cnt += strlen(line) - 1;
    }
    printf("%i\n", cnt);

    if (line)
        free(line);
    exit(EXIT_SUCCESS);
}deadman@desktop:~$ gcc file.c 
deadman@desktop:~$ ./a.out 
123456
123456
123456
123456
24
Добавлено через 1 минуту
как видно за 1 в линукс

Добавлено через 2 минуты
Цитата Сообщение от wiki{управляющие символы}
В CP/M, MS-DOS и Microsoft Windows для разделения строк в текстовых файлах используется сочетание символов \r\n.
Цитата Сообщение от wiki{управляющие символы}
Перемещает позицию печати на одну строку вниз. В текстовых файлах в Unix разделяет строки.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.12.2011, 13:10 #26
Цитата Сообщение от alkagolik Посмотреть сообщение
как видно за 1 в линукс
HEX dump файла /home/deadman/file.txt в студию.
0
alkagolik
Заблокирован
14.12.2011, 13:15 #27
0000000 3231 3433 3635 310a 3332 3534 0a36 3231
0000010 3433 3635 310a 3332 3534 0a36
000001c
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.12.2011, 13:16 #28
alkagolik, ой что-то не вижу я здесь виндовского перевода строки, который из двух байт состоит. Вижу только юниксовый 0x0A.
0
alkagolik
Заблокирован
14.12.2011, 13:19 #29
fasked, я уже и не помню как венда выглядит... Вы видимо оговорились.
Цитата Сообщение от fasked Посмотреть сообщение
В Linux за два, в Windows за один.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
14.12.2011, 13:29 #30
Цитата Сообщение от alkagolik Посмотреть сообщение
Вы видимо оговорились.
То есть других аргументов у Вас нет?
Виндовской перевод строки в Linux будет посчитан за два символа, а в Windows за один. Ясен пень, что никсовый перевод строки будет в никсах же за один символ считаться. В никсах вообще разницы между бинарными и текстовыми файлами нет. Потому и размер файла будет равен количеству символов в нем. В форточках разница есть.

Не по теме:

Тред не читай @ Сразу отвечай.



Добавлено через 7 минут
Прикладываю к своим словам гневный пример убеждений
Код
fasked@nexus:/tmp$ printf "abcd\x0D\x0Aabcd\n" >> file
fasked@nexus:/tmp$ cat file
abcd
abcd
fasked@nexus:/tmp$ wc -m file
11 file
fasked@nexus:/tmp$ hd file
00000000  61 62 63 64 0d 0a 61 62  63 64 0a                 |abcd..abcd.|
0000000b
fasked@nexus:/tmp$ cat a.c
#include <stdio.h>

int main() {
   int count = 0;
   while (fgetc(stdin) != EOF)
      ++count;

   printf("%d\n", count);
   return 0;
}
fasked@nexus:/tmp$ gcc a.c
fasked@nexus:/tmp$ ./a.out < file
11
В котором я визуально вижу только два перевода строки, но тем не менее символов что wc что собственный велосипед насчитывают 11 штук.

У кого винда есть, проверьте сколько символов насчитает в идентичном по hex-dump файле?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2011, 13:29
Привет! Вот еще темы с ответами:

Подсчитать количество чисел в файле - C++
Есть текстовый файл с числами (.txt). Необходимо подсчитать сколько в нем чисел. Написал программу, однако не работает, не могу найти...

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

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

c++ как подсчитать количество записей в файле - C++
Есть файл, в нем хранится определенное количество структур размером sizeof(Student), необходимо подсчитать их количество. Пробовал вот так,...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
14.12.2011, 13:29
Ответ Создать тему
Опции темы

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