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

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

Восстановить пароль Регистрация
 
Calipso
 Аватар для Calipso
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 6
21.12.2011, 23:04     Вывести в выходной файл монотонные слова #1
не могу найти ошибку в проге, помоги, плиз

Входной файл состоит из одной строки. Размер строки не ограничен и её необходимо считывать поблочно по 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2011, 23:04     Вывести в выходной файл монотонные слова
Посмотрите здесь:

C++ Найти и записать в выходной файл слова, в которых нет повторяющихся букв
C++ Вывести в выходной файл все слова, начинающиеся на заданную букву, и их количество
Найти и записать в выходной файл все симметричные слова C++
дан входной текстовый файл. Вывести в выходной файл строку с максимальным количеством слов C++
выбрать и записать в выходной файл слова по данному образцу: *#*#*, где * - согласная, а # - гласная буква C++
C++ Записать в выходной файл построчно все ключевые слова, встречающиеся в этой программе
C++ Скопировать входной файл в выходной, удалив все слова, имеющие удвоенные буквы
Вывести в выходной файл округленное до n знаков после десятичной точки число E C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.12.2011, 06:04     Вывести в выходной файл монотонные слова #2
Цитата Сообщение от Calipso Посмотреть сообщение
не могу найти ошибку в проге, помоги, плиз
либо выкладывайте текст ошибки или описывайте что не так работает, либо закрою тему ибо вопросов она не содержит
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.12.2011, 07:39     Вывести в выходной файл монотонные слова #3
подозреваю что сигфолт в связях 11-13; 23-25. Кроме этого нужно проверять строгое неравенство, а вы проверяете нестрогое. Может библиотечные функции i\o конфликтуют, не? В строке 48 проверяется конец строки, а кто-то ноль поместил в буфер, размером в 1024 + 1 байт в ячейку block[1024]? не вижу.
Yandex
Объявления
22.12.2011, 07:39     Вывести в выходной файл монотонные слова
Ответ Создать тему
Опции темы

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