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

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

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

Архиважно) - C++

08.06.2011, 20:06. Просмотров 300. Ответов 2
Метки нет (Все метки)

Помогите плиз составить программу «сжатия» исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких идущих подряд символов x, заменяется на текст x(k). Где x – символ, k – число вхождений этого символа в исходную последовательность.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
08.06.2011, 22:29     Архиважно) #2
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
#include <iostream>
#include <string>
#include <sstream>
 
 
void compress(std::string& s)
{
    std::string::size_type k;
    std::ostringstream stream;
 
    for(std::string::size_type i = 0; i < s.length();)
    {
        for(k = 0; s[i+k] == s[i]; ++k);
        if(k > 1)
        {
            stream << s[i] << '(' << k << ')';
            s.replace(i, k, stream.str());
            i+= stream.str().length();
            stream.str("");
        }
        else ++i;
    }
}
 
int main()
{
    std::string s;
    std::getline(std::cin, s);
    compress(s);
    std::cout << s << '\n';
 
    return 0;
}
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.06.2011, 01:15     Архиважно) #3
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
#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <stack>
 
std::string Compress(const std::string &source) {
  std::ostringstream result;
  std::string::const_iterator start = source.begin();
  while (start != source.end()) {
    std::string::const_iterator end = start + 1;
    while (end != source.end() && *end == *start) ++end;
    if ((end - start) < 5)
      std::copy(start, end,
        std::ostream_iterator<std::string::value_type>(result, ""));
    else
      result << *start << "(" << (end - start) << ")";
    start = end;
  }
  return result.str();
}
 
int main(int argc, char *argv[]) {
  std::cout << Compress("bbaaaaaaaabaaaacccccc") << std::endl;
}
Yandex
Объявления
09.06.2011, 01:15     Архиважно)
Ответ Создать тему
Опции темы

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