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

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

Войти
Регистрация
Восстановить пароль
 
ЮрийFM
0 / 0 / 0
Регистрация: 26.12.2008
Сообщений: 9
#1

если в строке встречена одинаковая последовательность символов, заменить их кодом 255 - C++

28.12.2008, 20:11. Просмотров 966. Ответов 3
Метки нет (Все метки)

Задача такова:
обработать массив строк (длина каждой не более 100 символов). если в строке встречена одинаковая последовательность символов, заменить их кодом 255, за которым следует код этого символа и количесво одинаковых символов. Желательно без стандартых функций со строками.


Может кто осилит..

Вопрос таков ...это код работает без привязок... в старом компиляторе к примеру Borland_C не раюботает... может кто поможет отформатировать код?? очень надобно

Код
void EncodeSingleChar(std::string & str, char c, char count)
{
    if (count != 0)
    {
        str.push_back(-1);
        str.push_back(count + 1);
    }

    str.push_back(c);
}

void EncodeString(std::string & str)
{
    const long cMaxStringSize = 100;
    if (str.size() > cMaxStringSize)
    {
        std::cerr << "String too long: " << str << std::endl;
        throw std::runtime_error(std::string("String too long: ") + str);
    }

    std::string out_str;
    out_str.reserve(str.size());

    char last_char = 0;
    char charsCount = 0;

    std::string::const_iterator it = str.begin();
    if (it != str.end())
    {
        last_char = *it;
        ++it;
    }

    for (; it != str.end(); ++it)
    {
        if (*it == last_char)
        {
            ++charsCount;
        }
        else
        {
            EncodeSingleChar(out_str, last_char, charsCount);
            charsCount = 0;
        }

        last_char = *it;
    }

    if (last_char)
        EncodeSingleChar(out_str, last_char, charsCount);

    str = out_str;
}

void Test()
{
    std::ifstream in_f("test_in.txt");
    std::ofstream out_f("test_out.txt");

    std::string str;
    while (in_f.good() && std::getline(in_f, str))
    {
        EncodeString(str);
        out_f << str << std::endl;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2008, 20:11     если в строке встречена одинаковая последовательность символов, заменить их кодом 255
Посмотрите здесь:

C++ Вывести последовательность символов, расположенных до первого двоеточия в строке
C++ В строке символов заменить каждый второй символ s на f
C++ Заменить всюду один заданный символ на последовательность из пяти таких символов
Заменить в строке последовательность пробелов на один пробел. C++
Заменить в строке каждую последовательность из двух и более пробелов на один пробел C++
C++ Массив: Вычислить сумму элементов, лежащих на главной диагонали матрицы {Cÿ}, образованной следующим образом: Cÿ = aÿ + bÿ
C++ Заменить последнее слово из введенной строки на последовательность символов «*»
Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строке C++
C++ Если минимальный элемент матрицы стоит в первой строке, то элементы, стоящие в строке за ним, заменить нулями
Заменить в строке одну последовательность символов на другую C++
Проверить, есть ли в строке заданная последовательность символов C++
В строке заменить последовательность повторяющихся символов на количество его повторений C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ЮрийFM
0 / 0 / 0
Регистрация: 26.12.2008
Сообщений: 9
05.01.2009, 12:44  [ТС]     если в строке встречена одинаковая последовательность символов, заменить их кодом 255 #2
Вопрос таков ...это код работает без привязок... в старом компиляторе к примеру Borland_C не раюботает... может кто поможет отформатировать код?? очень надобно
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
void EncodeSingleChar(std::string & str, char c, char count)
{
    if (count != 0)
    {
        str.push_back(-1);
        str.push_back(count + 1);
    }
 
    str.push_back(c);
}
 
void EncodeString(std::string & str)
{
    const long cMaxStringSize = 100;
    if (str.size() > cMaxStringSize)
    {
        std::cerr << "String too long: " << str << std::endl;
        throw std::runtime_error(std::string("String too long: ") + str);
    }
 
    std::string out_str;
    out_str.reserve(str.size());
 
    char last_char = 0;
    char charsCount = 0;
 
    std::string::const_iterator it = str.begin();
    if (it != str.end())
    {
        last_char = *it;
        ++it;
    }
 
    for (; it != str.end(); ++it)
    {
        if (*it == last_char)
        {
            ++charsCount;
        }
        else
        {
            EncodeSingleChar(out_str, last_char, charsCount);
            charsCount = 0;
        }
 
        last_char = *it;
    }
 
    if (last_char)
        EncodeSingleChar(out_str, last_char, charsCount);
 
    str = out_str;
}
 
void Test()
{
    std::ifstream in_f("test_in.txt");
    std::ofstream out_f("test_out.txt");
 
    std::string str;
    while (in_f.good() && std::getline(in_f, str))
    {
        EncodeString(str);
        out_f << str << std::endl;
    }
}
Globus_lord
Сообщений: n/a
04.01.2013, 15:31     если в строке встречена одинаковая последовательность символов, заменить их кодом 255 #3
А вдруг осталось ))) Юрий, код программы остался по этой задаче? ))
kpoxaa
70 / 31 / 1
Регистрация: 03.08.2012
Сообщений: 446
06.12.2013, 16:25     если в строке встречена одинаковая последовательность символов, заменить их кодом 255 #4
аналогичный вопрос?...

Добавлено через 17 минут
C++
1
2
char last_char = 0;
char charsCount = 0;
что это за бред? так можно?
Yandex
Объявления
06.12.2013, 16:25     если в строке встречена одинаковая последовательность символов, заменить их кодом 255
Ответ Создать тему
Опции темы

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