Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/293: Рейтинг темы: голосов - 293, средняя оценка - 4.97
3 / 3 / 0
Регистрация: 12.12.2010
Сообщений: 99
1

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

11.12.2011, 17:05. Показов 54641. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2011, 17:05
Ответы с готовыми решениями:

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

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

Подсчитать количество символов в файле
Напишите программу, которая считывает построчно содержимое текстового файла и подсчитывает...

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

32
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.12.2011, 12:45 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от go Посмотреть сообщение

Не по теме:


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

Не по теме:

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

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

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

Не по теме:

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

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

0
Заблокирован
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
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
14.12.2011, 13:10 26
Цитата Сообщение от alkagolik Посмотреть сообщение
как видно за 1 в линукс
HEX dump файла /home/deadman/file.txt в студию.
0
Заблокирован
14.12.2011, 13:15 27
0000000 3231 3433 3635 310a 3332 3534 0a36 3231
0000010 3433 3635 310a 3332 3534 0a36
000001c
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
14.12.2011, 13:16 28
alkagolik, ой что-то не вижу я здесь виндовского перевода строки, который из двух байт состоит. Вижу только юниксовый 0x0A.
0
Заблокирован
14.12.2011, 13:19 29
fasked, я уже и не помню как венда выглядит... Вы видимо оговорились.
Цитата Сообщение от fasked Посмотреть сообщение
В Linux за два, в Windows за один.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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
Заблокирован
14.12.2011, 13:42 31
вендовый файел в юниксе... дык ясно что. Это и означает strlen() - {2, 1}. Вы же не уточнили что говорите про случай чтения вендузного файла в юниксе. Отсюда и непонятка. А это что за такой суржик? "abcd\x0D\x0Aabcd\n" полуюникс - полувиндуз.

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
В котором я визуально вижу только два перевода строки
Цитата Сообщение от alkagolik Посмотреть сообщение
В CP/M, MS-DOS и Microsoft Windows для разделения строк в текстовых файлах используется сочетание символов \r\n.
Цитата Сообщение от fasked Посмотреть сообщение
Тред не читай @ Сразу отвечай.

либо вы меня за выскочку держите, либо просто непонимаете, либо неясно выражаетесь. Я об этом уже неоднажды в топике сказал. Про разные управляющие символы.
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
14.12.2011, 14:34 32
fasked, с вычетом пробела который пришлось добавить после \x0A (ато воспринимало как нелегитимный символ) в Windows Seven Enterprise x64 - 11 символов
1
0 / 0 / 0
Регистрация: 20.11.2016
Сообщений: 1
11.05.2019, 15:17 33
Функция для подсчета символов в строке это:
strlen(имя_переменной);
0
11.05.2019, 15:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2019, 15:17
Помогаю со студенческими работами здесь

В текстовом файле подсчитать количество символов и строк
Ребята! Помогите разобраться с файлами нужно - в текстовом файле. Подсчитать количество символов и...

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

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

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


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

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