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

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

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

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

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

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 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     Вывести в выходной файл монотонные слова
Ответ Создать тему
Опции темы

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