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

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

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

Вывести в выходной файл монотонные слова - C++

21.12.2011, 23:04. Просмотров 452. Ответов 2
Метки нет (Все метки)

не могу найти ошибку в проге, помоги, плиз

Входной файл состоит из одной строки. Размер строки не ограничен и её необходимо считывать поблочно по 1024 байта. Строка состоит из слов, разделенных пробелами. Каждое слово состоит из символов английского алфавита и имеет длину от 1 до 100. Гарантируется что между словами только один пробел и не используются другие знаки-разделители. Слово называется монотонно возрастающей последовательностью, если код каждого следующего символа больше кода предыдущего символа. Аналогично слово называется монотонно убывающей последовательностью, если код каждого следующего символа меньше кода предыдущего символа. Необходимо вывести в выходной файл монотонные слова, монотонно возрастающие слова записать без изменения, монотонно убывающие слова в обратном порядке написания слова. Необходимо учитывать при поблочном чтении, что в блок последнее слово может быть записано не полностью, а его оставшуюся часть нужно считать следующим блоком, и объединить в два блока в одном вспомогательном буфере.

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
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
    
bool isAsc (char*buf, int left, int right) 
{
    if (left > right)
        return false;
        for (int i=left; i<=right-1; i++)
        {
            if (buf[i] >= buf[i+1])
                return false;
        }
        return true;
}
 
bool isDesc(char*buf,int left, int right)
{
    if (left > right)
        return false;
        for (int i=left; i<=right-1; i++)
        {
            if (buf[i] <= buf[i+1])
                return false;
        }
        return true;
}
 
int main(int argc, char* argv[]) 
{
 
    if (argc != 3) {
        cout<<"Wrong number of arguments!" << "\n";
        exit(1);
    }
    
    FILE * fin = freopen(argv[1], "rt", stdin);
    FILE * fout = freopen(argv[2], "wt", stdout);
    char block[1024];
    char buf[2048];
    int pos=0;
    
    while (fgets(block, 1024, fin) != 0) 
    {
        int i=0;
        while (block[i] !=0) {
            buf[pos] = block[i];
            i = i+1;
            pos = pos+1;    
    }
        int start=0;
        for(i=0;i<=pos-1;i++){
            if (buf[i]==' ') 
            {
                if (isAsc(buf, start, i-1)) 
                {   
                    for(int j=start; j<=i-1;j++)
                        fputc(buf[j],fout);
                    fputs(" ", fout);
                } 
                else if(isDesc(buf, start, i-1))
                {
                    for(int j=i-1; j>=start;j--)                    
                        fputc(buf[j],fout);
                    fputs(" ", fout);
                }
                start = i+1;
            }
        }
 
        i=0;
        while(start<pos)
            buf[i++]=buf[start++];
        pos=i;      
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2011, 23:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести в выходной файл монотонные слова (C++):

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

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

дан входной текстовый файл. Вывести в выходной файл строку с максимальным количеством слов - C++
Дан входной текстовый файл (одна строка – одно предложение). Вывести в выходной файл строку (строки) с максимальным количеством слов.

Найти и записать в выходной файл все симметричные слова - C++
В произвольном тексте входного файла, содержащем не более 10 строк, в каждой строке не более 80 символов, найти и записать в выходной файл...

Найти и записать в выходной файл слова, в которых нет повторяющихся букв - C++
Привет всем! У меня такая задачка: В произвольном тексте входного файла, содержащем не более 10 строк, в каждой строке не более 80...

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

2
Jupiter
Каратель
Эксперт С++
6566 / 3987 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.12.2011, 06:04 #2
Цитата Сообщение от Calipso Посмотреть сообщение
не могу найти ошибку в проге, помоги, плиз
либо выкладывайте текст ошибки или описывайте что не так работает, либо закрою тему ибо вопросов она не содержит
1
alkagolik
Заблокирован
22.12.2011, 07:39 #3
подозреваю что сигфолт в связях 11-13; 23-25. Кроме этого нужно проверять строгое неравенство, а вы проверяете нестрогое. Может библиотечные функции i\o конфликтуют, не? В строке 48 проверяется конец строки, а кто-то ноль поместил в буфер, размером в 1024 + 1 байт в ячейку block[1024]? не вижу.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 07:39
Привет! Вот еще темы с ответами:

Записать в выходной файл построчно все ключевые слова, встречающиеся в этой программе - C++
2. Дана программа написанная на языке Pascal. Записать в выходной файл построчно все ключевые слова, встречающиеся в этой программе, указав...

выбрать и записать в выходной файл слова по данному образцу: *#*#*, где * - согласная, а # - гласная буква - C++
Здравствуйте) Нужно написать программа на c++ Задание: В произвольном тексте входного файла, содержащем не более 10 строк, в...

Вывести в выходной файл округленное до n знаков после десятичной точки число E - C++
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки,...

Как вывести в файл последние буквы каждого слова в файл? - C++
Помогите, пожалуйста. Задание следующее: сформировать строку из последних букв исходного текста. Текст хранится в файле, нужно взять оттуда...


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

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

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