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

Указатели и строки - C++

Восстановить пароль Регистрация
 
CityFix
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 5
24.06.2010, 05:00     Указатели и строки #1
Здравствуйте! Помогите решить такую задачу
Найти в строке последовательности , состоящие из одного повтопяющегося символа, и заменить его на число символов и один символ, например мммммм - 5м
Реализовал вот так:

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
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
void Simvol(char *c)
 {
      int i,j,k,m; 
        for (i=0; c[i]!=0; i++) 
                {
                     if(c[i]!=' ' && c[i]==c[i+1]) 
                        {          
                for (j=i, k=1; c[j]==c[j+1]; k++, j++);                             if (k>=10) c[i++] = k/10 + '0';c[i++] = k%10+'0';
              for(j++, m=i+1; c[j]!=0; j++, m++) c[m]=c[j];
                      c[m]=0;
                       }
                }
}
 
 int main()
 {
 char m[80]="ccccccceeaa dfgdfg hhhhhhhh ttsvvvgggg zzzzzzzz kkkkkkkk sdrgbbjr";//Строка
 SetConsoleCP(1251); 
 SetConsoleOutputCP(1251); 
 Simvol(m);
 puts(m);
}
Подскажите как реализовать функцию используя указатели?

Добавлено через 11 часов 39 минут
Очень сильно надо, может кто помочь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2010, 05:00     Указатели и строки
Посмотрите здесь:

указатели и строки? C++
Строки и указатели C++
C++ Строки и указатели........
Строки и указатели с++ C++
C++ Указатели и строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
24.06.2010, 05:26     Указатели и строки #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char* compress(char *s)
{
    int len = strlen(s);
    char *res = (char*)malloc(len+1);
    int curLen = 0;
    int cnt = 1;
    for(int i = 0; i < len; i++)
        if(i == len-1 || s[i] != s[i+1])
        {
            if(cnt > 1)
                curLen += sprintf(res+curLen,"%d",cnt);
            curLen += sprintf(res+curLen,"%c",s[i]);
            cnt = 1;
        }
        else
            cnt++;
    res[curLen] = 0;
    return res;
}
CityFix
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 5
24.06.2010, 12:53  [ТС]     Указатели и строки #3
Цитата Сообщение от Хохол Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char* compress(char *s)
{
    int len = strlen(s);
    char *res = (char*)malloc(len+1);
    int curLen = 0;
    int cnt = 1;
    for(int i = 0; i < len; i++)
        if(i == len-1 || s[i] != s[i+1])
        {
            if(cnt > 1)
                curLen += sprintf(res+curLen,"%d",cnt);
            curLen += sprintf(res+curLen,"%c",s[i]);
            cnt = 1;
        }
        else
            cnt++;
    res[curLen] = 0;
    return res;
}
Спасибо! Но немного не то, нужна реализация с помощью указаетелей используя операции ++ и --
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
24.06.2010, 13:08     Указатели и строки #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char* compress(char *s)
{
    int len = strlen(s);
    char *res = (char*)malloc(len+1);
    char *ptr = res;
    int cnt = 1;
    for(int i = 0; i < len; i++)
        if(i == len-1 || s[i] != s[i+1])
        {
            if(cnt > 1)
                ptr += sprintf(ptr,"%d",cnt);
            ptr += sprintf(ptr,"%c",s[i]);
            cnt = 1;
        }
        else
            cnt++;
    *ptr = 0;
    return res;
}
Ну негде тут ++ и -- присобачить, и без них получается.
Yandex
Объявления
24.06.2010, 13:08     Указатели и строки
Ответ Создать тему
Опции темы

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