Составить процедуру "сжатия" исходной последовательности символов: каждая подпоследовательность, состоящая из нескольких вхождения одного и того же символа заменяется на текст 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; }
Ключевые слова:
строка сжатие архивирование количество
|
|||||||