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

Чтение из файла только букв и знаков препинания - C++

Восстановить пароль Регистрация
 
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
08.08.2013, 16:28     Чтение из файла только букв и знаков препинания #1
Задание из книги Либерти и Джонса (17.4):
"Напишите программу, получающую имя файла в качестве аргумента командной строки и открываюющую его для чтения. Считайте все символы файла по одному и выведите на экран только те из них, которые представляют собой буквы и знаки препинания. (Игнорируйте все непечатаемые символы.) Закройте файл перед завершением работы программы."

Листинг из "Ответы" (сам не сумел написать):
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
 
int _tmain(int argc, char** argv)
{
    if (argc != 2)
    {
        cout << "Usage: argv[0] <infile>\n";
        return (1);
    }
 
    ifstream fin (argv[1], ios::binary);
    if (!fin)
    {
        cout << "Unable to open " << argv[1] << " for reading.\n";
        return (1);
    }
 
    char ch;
    while (fin.get(ch))
    {
        if ((ch > 32 && ch << 127) || ch == '\n' || ch == '\t')
            cout << ch;
    }
    fin.close();
    return 0;
}
Вопросы:
1) Как правильно запустить программу? Пока что добился результата: "Usage: argv[0] <infile>" (см. Миниатюры).
2) Условие: "Считайте все символы файла...". Какие символы, ведь, в файле нет же ничего?
3) Каким образом 24-ая и 25-ая строки выводят на экран только те символы, "которые представляют собой буквы и знаки препинания"? Пожалуйста, объясните 24 строку.
4) Почему Либерти написал условие argc != 2 в 8-ой строке? Ведь, аргумент же один (имя файла)!
5) Для чего использовать ios::binary (14-ая строка)?
Миниатюры
Чтение из файла только букв и знаков препинания  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2013, 16:28     Чтение из файла только букв и знаков препинания
Посмотрите здесь:

C++ Расстановка знаков препинания
Удалить из файла все цифры, если они следуют после знаков препинания. C++
C++ Кол-во знаков препинания и букв в строке
C++ Выполнить статистику текста: подсчитать количество букв, знаков препинания, слов, предложений, абзацев.
Считать из файла, подсчитать кол-во знаков препинания, записать в файл. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 16:38     Чтение из файла только букв и знаков препинания #2
Вопросы:
1) Как правильно запустить программу? Пока что добился результата: "Usage: argv[0] <infile>" (см. Миниатюры).
2) Условие: "Считайте все символы файла...". Какие символы, ведь, в файле нет же ничего?
3) Каким образом 24-ая и 25-ая строки выводят на экран только те символы, "которые представляют собой буквы и знаки препинания"? Пожалуйста, объясните 24 строку.
4) Почему Либерти написал условие argc != 2 в 8-ой строке? Ведь, аргумент же один (имя файла)!
5) Для чего использовать ios::binary (14-ая строка)?[/QUOTE]

1)Передать правельное имя файла
2) Предпологается что вы укажите файл в котором что либо присутствует.
3) все символы имеют свой код ch > 32 && ch << 127 коды 32-127 это буквы ch == '\n' || ch == '\t' знаки припеания
4)Не уверен ибо сам до конца не пойму однако вероятно что это проверка и вывод подсказки как правильно передавать аргументы если ты ввел не 2-ва аргумента это ошибка и оно выводит подсказуку
5) Для того чтобы открыть файл в бинарном виде!
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
08.08.2013, 16:38     Чтение из файла только букв и знаков препинания #3
1) Как правильно запустить программу? Пока что добился результата: "Usage: argv[0] <infile>" (см. Миниатюры).
Я так подозреваю, запускать надо с доп.параметром - именем входного файла, который создан заранее. Например, так:
C++
1
C:>z17.4.exe input.txt
2) Условие: "Считайте все символы файла...". Какие символы, ведь, в файле нет же ничего?
Создай этот файл и в нём будет тебе всё.

3) Каким образом 24-ая и 25-ая строки выводят на экран только те символы, "которые представляют собой буквы и знаки препинания"? Пожалуйста, объясните 24 строку.
Выводятся только те символы, для которых выполнилось условие:
C++
1
if ((ch > 32 && ch < 127) || ch == '\n' || ch == '\t')
т.е. с кодами от 32го до 127го (печатные символы), а также перенос строки и табуляция.

Кстати, обрати внимание, ты опечатался вот тут:
C++
1
ch << 127
4) Почему Либерти написал условие argc != 2 в 8-ой строке? Ведь, аргумент же один (имя файла)!
Вроде бы первым аргументом идёт имя экзешника, а вторым уже - входного файла.

5) Для чего использовать ios::binary (14-ая строка)?
Входной файл дожен открываться как бинарный, т.е. просто набор байт.
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
08.08.2013, 16:53  [ТС]     Чтение из файла только букв и знаков препинания #4
Цитата Сообщение от alex1392 Посмотреть сообщение
1)Передать правельное имя файла
Как?
Цитата Сообщение от alex1392 Посмотреть сообщение
все символы имеют свой код
ANSCII?
Цитата Сообщение от alex1392 Посмотреть сообщение
ch == '\n' || ch == '\t' знаки припеания
Каким образом символ новой строки и табуляции представляют знаки препинания?
Цитата Сообщение от alex1392 Посмотреть сообщение
Для того чтобы открыть файл в бинарном виде!
Что это за бинарный вид?
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
08.08.2013, 16:59  [ТС]     Чтение из файла только букв и знаков препинания #5
Цитата Сообщение от John Prick Посмотреть сообщение
1
C:>z17.4.exe input.txt
Попробовал с txt. Не вышло!
В файле было: "I was here!".
Миниатюры
Чтение из файла только букв и знаков препинания  
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 17:01     Чтение из файла только букв и знаков препинания #6
Цитата Сообщение от Erjay Посмотреть сообщение
Как?

ANSCII?

Каким образом символ новой строки и табуляции представляют знаки препинания?
Что это за бинарный вид?

Честно говоря с консоли нечего не передаю лично но в книги должно быть описание вероятнее всего
"Usage: argv[0] -количевство передаваемых аргументов
<infile> - имя файла например test.bin

Для программистов табуляция и новая строка это родные знаки припенания если тебе ближе запятые вставь туда "," и "." например это каждому свое )) можно туда хоть 50 знаков запихать ) это просто как пример сделано
Файл в бинарном виде это файл с расширением bin обычно это кучка 1 и 0 тоесть 2-ва состаяния ))
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
08.08.2013, 17:04  [ТС]     Чтение из файла только букв и знаков препинания #7
Цитата Сообщение от John Prick Посмотреть сообщение
Кстати, обрати внимание, ты опечатался вот тут:
Код C++
1
ch << 127
Перепечатал листинг книги. Наверное, там ошибка!
Цитата Сообщение от John Prick Посмотреть сообщение
т.е. с кодами от 32го до 127го (печатные символы),
Знаки препинания тоже входят в эту область?
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 17:06     Чтение из файла только букв и знаков препинания #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void main()
{
 
 
 
   
    ifstream fin ("test1.bin", ios::binary);
    if (!fin)
    {
        cout << "Unable to open " << "test1 "<< " for reading.\n";
    }
    char ch;
    while (fin.get(ch))
    {
        if ((ch > 32 && ch < 127) || ch == '\n' || ch == '\t')
            cout << ch;
    }
    fin.close();
}
Вот так будит выглядеть этажи програма в моем варианте )) обязательное наличия файла test1.bin
Проверено и работает на все 100%
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.08.2013, 17:24     Чтение из файла только букв и знаков препинания #9
Цитата Сообщение от Erjay Посмотреть сообщение
ANSCII?
ASCII !
не путай с ANSI, если что.
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
08.08.2013, 17:28  [ТС]     Чтение из файла только букв и знаков препинания #10
Это запуск программы без командной строки, так?
Пробовал. Создал бинарный файл в блокноте (если так можно): написал "101011010" и сохранил с расширением bin.
Не знаю куда поместить bin-файл. Пишет: "Unable to open test1 for reading".
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 17:32     Чтение из файла только букв и знаков препинания #11
Знаки препинания тоже входят в эту область?
вот так можно увидеть что туда входит
C++
1
2
for(int i=32;i<=127;i++)
        cout<<(char)i<<endl;
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
08.08.2013, 17:51     Чтение из файла только букв и знаков препинания #12
Решай свою задачу последовательно. Сначала добейся, чтобы просто открывался файл с правильным именем. Заодно убедись, что в командной строке ты прописываешь верное имя файла.
Только потом рассуждай о знаках препинания.
Надеюсь, ты понимаешь, что имя файла надо в командной строке прописывать?
Зачем ты работаешь с бинарным файлом?
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 18:39     Чтение из файла только букв и знаков препинания #13
Цитата Сообщение от Erjay Посмотреть сообщение
Это запуск программы без командной строки, так?
Пробовал. Создал бинарный файл в блокноте (если так можно): написал "101011010" и сохранил с расширением bin.
Не знаю куда поместить bin-файл. Пишет: "Unable to open test1 for reading".
ты в чем работаеш ) ? лично я в visual studio 2010 файл помещяется тудажи где находятся файлы с main и другие файлы проэкта

Добавлено через 7 минут
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
    // часть кода отвеча за создание строки 
    string name;     
    getline(cin,name);   // получение строки с консоли
    ofstream f("tester1.bin",ios::binary);    //создание файла и открытия файла для записи
    f<<name;                                        // запись в файл то что ты ввел с консоли 
    f.close();                                         // закрытие файла
    ifstream fin ("tester1.bin", ios::binary);  // открытие файла для чтения 
 
                                                                // ниже находится тот код который и был
    if (!fin)
    {
        cout << "Unable to open " << "test1 "<< " for reading.\n";
    }
    char ch;
    while (fin.get(ch))
    {
        if ((ch > 32 && ch < 127) || ch == '\n' || ch == '\t')
            cout << ch;
    }
    fin.close();
}

Вот код создает файл записывает в него то что ты вводиш с консоли а потом посимвольно читает не выводя пробелова и табуляций

Добавлено через 3 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Решай свою задачу последовательно. Сначала добейся, чтобы просто открывался файл с правильным именем. Заодно убедись, что в командной строке ты прописываешь верное имя файла.
Только потом рассуждай о знаках препинания.
Надеюсь, ты понимаешь, что имя файла надо в командной строке прописывать?
Зачем ты работаешь с бинарным файлом?
он работает с бинарным файлом так как перепрыгнул кусок изучения с++ и решил сначала написать сортировки потом списки потом векторы в последствии понять что он ничего не понимает и начать всетаки с Hello world
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 19:00     Чтение из файла только букв и знаков препинания
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
08.08.2013, 19:00     Чтение из файла только букв и знаков препинания #14
Насколько я знаю - когда мы открываем файл в бинарном виде, то в Windows мы должны проверять не '\n', а '0x10' и '0x13'.
Yandex
Объявления
08.08.2013, 19:00     Чтение из файла только букв и знаков препинания
Ответ Создать тему
Опции темы

Текущее время: 12:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru