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

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

Войти
Регистрация
Восстановить пароль
 
Erjay
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
#1

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

08.08.2013, 16:28. Просмотров 973. Ответов 13
Метки нет (Все метки)

Задание из книги Либерти и Джонса (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++
Прошу помочь с одной программой: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;stdio.h&gt;...

Выполнить статистику текста: подсчитать количество букв, знаков препинания, слов, предложений, абзацев. - C++
1. Дан текстовый файл. Выполнить статистику текста: подсчитать количество букв, знаков препинания, слов, предложений, абзацев. ...

Считать из файла, подсчитать количество знаков препинания, записать в файл - C++
Ребят, помогите пожалуйста, 29 июня экзамен по &quot;Основы программирования&quot;,кто сколько сможет сделать задач, тем всей группой поставим &quot;+&quot;...

Выборка из текстового файла знаков препинания и сохранение их в отдельный файл - C++
Дан текстовый файл. Создать файл содержащий все знаки препинания встретившиеся в текстовом файле (в том же порядке)

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

Удаление знаков препинания - C++
Удалить в строке все знаки препинания. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; void...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
773 / 706 / 129
Регистрация: 27.07.2012
Сообщений: 2,022
Завершенные тесты: 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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 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#. Заранее спасибо

Подсчитать количество знаков препинания в строке - C++
Подсчитать количество знаков препинания в строке. Строка - &quot;Осень,,Падают листья,,зима,,!&quot;. Вывести строку на экран и количество знаков...

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

В строке подсчитать количество знаков препинания - C++
В общем задание обстоит так:Ввести с экрана строку. В строке подсчитать количество знаков препинания (запятая,точка, восклицательный знак)....


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

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

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