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

Закодировать входную строку алгоритмом сокращения повторяющихся символов. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Боковой разворот матрицы http://www.cyberforum.ru/cpp-beginners/thread97968.html
Дана матрица HxW H – произвольное W – произвольное Задача: поменять столбцы в обратном порядке. Это действие оформить в виде функции. Было так: 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 Стало так:
C++ Переворот матрицы~изображения. Дана матрица HxW H – произвольное W – произвольное Реализовать функцию разворота матрицы “вверх ногами” или проще для понимания переворот изображения, Что это значит. Была матрица: 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 http://www.cyberforum.ru/cpp-beginners/thread97966.html
Клонирование четверти матрицы C++
1. Дана матрица размером HxW H - чётное W – чётное. Реализовать функцию клонирование(копирования) четверти(матрицы) на все её остальные четверти. Что это значит: Была матрица: 1 2 3 4 5 6 7 8 1 1 1 1 1 1 1 1
C++ кастинги на C++
Не могу найти инфу на русском об операторах приведения типов в C++: static_cast<> const_cast<> reinterpret_cast<> safe_cast<> dynamic_cast<> Помогите, плиз!
C++ вопрос к спецам: почему функция fputc при работе не устанавливает счётчик файла в конец? http://www.cyberforum.ru/cpp-beginners/thread97946.html
Друзья! То есть написана программка. С клавы вводится ОДИН символ и он запихивается в файл. А потом этот файл с помощью функции fread считывается обратно в переменную. Это реализовано в цикле, условие выхода из которого- счётчик считанных байтов достиг конца файла Но после первого считывания счётчик байтов не достигает конца файла! Почему? Загадка. Файл имеет размер равный 1, содержит на...
C++ Сохранить в файл текст, введенный из консоли, на русском языке ввожу с клавиатуры данные в структуру, сохраняю их в файл, а потом опять вывожу на экран. в консоли все нормально, а вот если текстовый файл открыть, то там сплошные иероглифы. ума не приложу что с этим можно сделать. пыталась использовать OemToCharA, но результат тот же. может кто знает как с этим бороться подробнее

Показать сообщение отдельно
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
23.02.2010, 19:31     Закодировать входную строку алгоритмом сокращения повторяющихся символов.
Корявенько получилось, но работает:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
*   Каждая последовательность одинаковых символов длиной более 4 должна быть представлена 
*   в виде строки *<количество символов>*<символ>. Например, для строки 'AAAbCxLLLLL2300fffffff' 
*   должно быть выведено 'AAAbCx*5*L2300*7*f'. Во входной строке не может встречаться символ '*'.
*/
    
#define MAX_STR 128
#define MAX_SAME 4
    
int main(void){
    char str[MAX_STR], buf[MAX_STR], res[MAX_STR], tmp[MAX_STR], *pStr, *pBuf;
    int cnt;
    
    while ( 1 ){
        printf("String: ");
        if ( !fgets(str, MAX_STR, stdin) )
            exit(1);
        if ( pStr = strrchr(str, '\n') )
            *pStr = '\0';
        if ( !*str )
            break;
        
        pStr = str;
        pBuf = buf;
        *pBuf = *pStr;
        *res = '\0';
 
        for ( ++pStr; *pStr; ++pStr ) {
            if ( *pBuf == *pStr )
                *++pBuf = *pStr;
            else {
                cnt = pBuf - buf + 1;
                if ( cnt > MAX_SAME ){
                    sprintf(tmp, "*%d*%c", cnt, *pBuf);
                    strcat(res, tmp);
                }
                else {
                    *++pBuf = '\0';
                    strcat(res, buf);
                }
                pBuf = buf;
                *pBuf = *pStr;
            }
        }
        cnt = pBuf - buf + 1;
        if ( cnt > MAX_SAME ){
            sprintf(tmp, "*%d*%c", cnt, *pBuf);
            strcat(res, tmp);
        }
        else {
            *++pBuf = '\0';
            strcat(res, buf);
        }
        printf("Encoded: %s\n", res);
    }
    
    exit(0);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru