0 / 0 / 0
Регистрация: 29.06.2016
Сообщений: 9
1

Обработать строку типа string, заменив одинаковые символы символом и их количеством

07.07.2016, 18:44. Показов 1592. Ответов 6

Вводится строка, например AABVHHCSDDK. Если есть одинаковые последующие символы(в нашем примере это AA, HH, DD), то на экран выводится A2BVH2CSD2K. Есть вопрос, как проходиться по каждому символу строки и сравнивать его с предыдущим. Ничего дельного пока не придумал.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2016, 18:44
Ответы с готовыми решениями:

Обработать словарь типа Dictionary<string, string> и на выходе получить ступенчатый массив
Всем здравствуйте! Я только начинаю познавать программирование (около месяца).Поэтому прошу...

В предложении заменить одинаковые, стоящие подряд символы одним символом
Пожалуйста, кому не трудно , помогите. Задача В предложении заменить одинаковые, стоящие подряд...

Зашифровать все трехбуквенные слова, заменив все символы на символы с кодом, большим на три единицы. Вывести новую строку.
Помогите решить задачу. Заранее спасибо. Зашифровать все трехбуквенные слова, заменив все символы...

Как скопировать строку типа std::string в другую строку такого же типа?
Хотел скопировать строку #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using...

6
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
07.07.2016, 18:46 2
C++
1
2
3
string s;
cin>>s;
if(s[0]==s[1]) cout<<"A2BVH2CSD2K";
0
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
07.07.2016, 18:50 3
Как-то так
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
int main () {
    string s;
    cin >> s;
    for (int i=0;i<s.length()-1;i++)
         if (s[i]==s[i+1])
             s[i+1] = '2';
    cout << s;
}
0
7 / 6 / 5
Регистрация: 26.06.2016
Сообщений: 24
07.07.2016, 18:52 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void main()
{
    clrscr();
    char str1[100], str2[100];
    cout<<"Первый текст : ";
    gets(str1);
    cout<<"Второй текст : ";
    gets(str2);
    if(strcmp(str1, str2)==0)
    {
        cout<<"Обе строки равны";
    }
    else
    {
        cout<<"Обе строки не равны";
    }
    getch();
}
0
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
07.07.2016, 19:02 5
NETClion, Почитайте внимательно условие
0
Комп_Оратор)
Эксперт по математике/физике
8727 / 4473 / 601
Регистрация: 04.12.2011
Сообщений: 13,362
Записей в блоге: 16
07.07.2016, 20:38 6
Лучший ответ Сообщение было отмечено Serg_IV как решение

Решение

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
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string compress_str(const string &src)
{
    ostringstream compressed;
    typedef  string::size_type LenType;
    LenType len=src.length(), repeat_cnt=1, ind=0;
    if(len<2)return src;
    char current_ch='\0';
    compressed<<src[0];
    for(LenType i=1; i<len; ++i)
    {
        if( src[i] == src[i-1])
        {
            if(src[i] != current_ch) 
            {
                current_ch = src[i];
                repeat_cnt=1;
            }
            repeat_cnt++;
            continue;
        }
        else 
        {
            if(current_ch!='\0')
            {
                current_ch='\0';
                compressed<<repeat_cnt;
                repeat_cnt=1;
                compressed<<src[i];
            }
            else
            {
                compressed<<src[i];
            }
        }
    }
    return compressed.str();
}
 
int main(int argc, char* argv[])
{
    string src="Asdfaaaaaaaafbbbbbgjkktrllllleqqqp";
    string compressed = compress_str(src);
    cout<<src<<"\n"<<compressed<<endl;
    system("pause");
    return 0;
}
1
125 / 125 / 44
Регистрация: 05.10.2013
Сообщений: 462
07.07.2016, 21:43 7
Serg_IV,

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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s, res;
    getline(cin, s);
    cout << s << endl;
 
    int counter;
    bool equals = false;
 
    int i;
    for (i = 0; i < s.length()-1; ++i)
    {
        if (s[i] == s[i + 1])
        {
            if (equals)
                ++counter;
            else
            {
                res.push_back(s[i]);
                equals = true;
                counter = 2;
            }
        }
        else
        {
            if (equals)
            {
                equals = false;
                res.append(to_string(counter));
            }
            else
                res.push_back(s[i]);
        }
    }
    if (equals)
        res.append(to_string(counter));
    else
        res.push_back(s[i]);
 
    cout << res << endl;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2016, 21:43
Помогаю со студенческими работами здесь

Изменить строку, заменив символы в дампе памяти
Здравствуйте не могу написать программу для этого задания: 1. Ввести исходные данные...

Разделение строки типа String на отдельные слова с разделяющим символом
Подскажите пожалуйста, как строку с n-ым количеством слов разделённых символом точка запятой...

Переделать строку заменив все символы следующими за ними
помогите, пожалуйста, написать программу в которой нужно ввести строку символов и переделать строку...

Не получается чтобы он все символы с текста читал и типа счетчика который считает одинаковые символы как один и плюсует их....Как сделать правильно???
#include&lt; stdio.h&gt; #include&lt; conio.h&gt; #include&lt; string.h&gt; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru