"Сжатие" последовательности символов

Составить процедуру "сжатия" исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких вхождения одного и того же символа заменяется на текст x(k), где x - символ, а k - строка, являющаяся записью числа вхождений в исходную последовательность.

АЛГОРИТМ:
Пробегая строку считать количество совпадающих символов и если таковых более четырех подряд
заменять их на соответствующую запись.

#include<iostream.h>       //Содержит cin,coute
#include<fstream.h>        //Содержит тип fstream
#include<string.h>         //Содержит строковые функции
#include<conio.h>          //Содержит getch();
#include<STDIO.H>          //Содержит getchar();
 
int iProverka(const int *);//Подсчёт количества цифр в числе
char cTransTsifr(const int *);//Преобразует числа от 0 до 9 в текст
 
int main(void){
const int N=256;
char cStroka[N];
char cBufStroka[N];
int i=0,i2=0,j=0,k=0,n=0,m=0,iPr=0;
for(m=0;m<=N;m++){
	cStroka[m]=0;
	cBufStroka[m]=0;
};
m=0;
cout<<"Vvedite stroku ne dlinnej "<<N<<" simvolov:\n";
while (((cStroka[m] = getchar()) != '\n')&&(N!=m)) m++;
cStroka[m] = 0;
while(cStroka[i]){
  if(cStroka[i]==cStroka[i+1]){
	k=2;
	j=i;
	while(cStroka[i+1]==cStroka[i+2]){//считаем совпадающие символы
		k++;
		i++;
	}
	i=j+k-1;
	iPr=iProverka(&k);
	if(k>4){//Нет смысла заменять меньше 4 цифр
		cBufStroka[i2]=cStroka[j];
		cBufStroka[i2+1]='(';
		cBufStroka[i2+2+iPr]=')';
		for(n=iPr;n>=1;n--){
			m=k;
			m=m%10;
			k=k/10;
			cBufStroka[i2+1+n]=cTransTsifr(&m);
		}
		i2=i2+iPr+2;
	}
	else{
		for(n=i2;n<=i2+k-1;n++) cBufStroka[n]=cStroka[j];
		i2=i2+k-1;
	}
  }
  else{
	cBufStroka[i2]=cStroka[i];
  }
  i++;
  i2++;
}
cout<<"Staraja stroka: "<<cStroka<<"\n"<<"Novaja stroka: "<<cBufStroka<<"\n";
getch();
return 1;
}
//---------------------FUNKTION---------------------------------------------
//Подсчет количества цифр в числе
int iProverka (const int *cC){
  int k=0,m=*cC;
  do{
	 k++;
	 m=m/10;
  }
  while (m!=0);
return k;
}
 
//Преобразует числа от 0 до 9 в текст
char cTransTsifr(const int *iTsifra){
char cTsifra;
switch(*iTsifra){
	case 0: cTsifra='0';break;
	case 1: cTsifra='1';break;
	case 2: cTsifra='2';break;
	case 3: cTsifra='3';break;
	case 4: cTsifra='4';break;
	case 5: cTsifra='5';break;
	case 6: cTsifra='6';break;
	case 7: cTsifra='7';break;
	case 8: cTsifra='8';break;
	case 9: cTsifra='9';break;
	default: break;
}
return cTsifra;
}

Ключевые слова: 
строка сжатие архивирование количество
ВложениеРазмер
ProcAndFunc.zip140.13 кб