PDA

View Full Version : سوال: فشرده سازی متن در c



mhzarei76
سه شنبه 17 آذر 1394, 07:27 صبح
با سلام وخسته نباشید مي خواهیم برنامه اي بنويسيم كه با دريافت يك رشته طولاني از حروف انگليسي، آن را فشرده سازي كند.
براي فشرده سازي به اين صورت عمل مي كنيم كه حروفي كه پشت سر هم به صورت تكراري مي آيند را فقط يك بار چاپ كرده، و بعد از آن تعداد دفعات تكرار آن را چاپ مي كنيم.
مثلا رشته زير
aaaaBBBCxyZZZeeeepppppKKAbbC
به رشته زير تبديل مي شود:
a4B3CxyZ3e4p5k2Ab2C
لطفا راهنمایی کنید ممنون میشم
این هم کد اگه میشه درستش کنید ممنون میشم
#include <stdio.h>#include <conio.h>
char zip(char n[100]);
int main (){
char n[100];
printf ("please enter the char :");
gets(n);
zip(n);
}
char zip (char n[100]){
char a[100],b=0;
int i=0,j=1,sum=1;
for (i;i<100;i++){
for (j;j<100;j++){
if (n[i]==n[j])
sum++;
else
break;
}
// printf ("%c%d",n[j],sum);
n[b]=n[i];
b++;
if (sum!=0)
n[b]=sum;
i=j;
j++;
sum=1;


if (n[i]=='\0')
break;
}
for (int i=0;i<100;i++){


printf ("%s",n[i]);
if (a[i]=='\0')
break;
}
}
137376

amirtork
چهارشنبه 18 آذر 1394, 23:11 عصر
سلام،
در کدام مرحله از مرحل کار دچار مشکل شدید؟
برای گرفتن راهنمایی بهتر و دقیق تر کد هایی که تا به اینجای پروژه رو نوشتید رو قرار بدید تا دوستان بتونن بهتر راهنمایی کنن.

negative60
پنج شنبه 19 آذر 1394, 02:16 صبح
چرا از کتابخونه های فشرده سازی مثل zlib (http://www.zlib.net/) استفاده نميکنيد؟

Nader G
پنج شنبه 19 آذر 1394, 10:35 صبح
چرا از کتابخونه های فشرده سازی مثل zlib (http://www.zlib.net/) استفاده نميکنيد؟

چون ظاهرا تمرین درسی هست.

mhzarei76
پنج شنبه 19 آذر 1394, 15:16 عصر
سلام،
در کدام مرحله از مرحل کار دچار مشکل شدید؟
برای گرفتن راهنمایی بهتر و دقیق تر کد هایی که تا به اینجای پروژه رو نوشتید رو قرار بدید تا دوستان بتونن بهتر راهنمایی کنن.
دوست عزیز کد رو قرار دادم اگه میشه اصلاح کنید من نیاز دارم

1-9-7-2
پنج شنبه 19 آذر 1394, 18:02 عصر
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFSIZE 1024

int ulen ( unsigned long int ) ;
int StringCompactor ( unsigned long int , char * , char * ) ;

/* output: a4B3CxyZ3e4p5k2Ab2C */



int main ()
{
char cs [ BUFSIZE ] ;

memset ( cs , '\0' , BUFSIZE + 1 ) ; /* [0] ... [BUFSIZE] */

printf ( "return value: %d\n" , StringCompactor ( BUFSIZE , cs , "aaaaBBBCxyZZZeeeepppppKKAbbC" ) ) ;

printf ( "new string: %s\n" , cs ) ;

return ( EXIT_SUCCESS ) ;
}



int StringCompactor ( unsigned long int bufsize_cs , char *cs , char *s )
{
if ( bufsize_cs < 2 ) {
return ( 1 ) ;
}

int c ;
unsigned long int e = 0 , n = 1 ;

while ( *s != '\0' && e < bufsize_cs - 1 ) {
if ( ( c = *s++ ) == *s ) {
++n ;
}
else {
*( cs + e++ ) = c ;
if ( n > 1 ) {
if ( bufsize_cs <= e + ulen ( n ) ) {
return ( 2 ) ;
}
e += strlen ( itoa ( n , cs + e , 10 ) ) ;
n = 1 ;
}
}
}

return ( 0 ) ;
}



int ulen ( unsigned long int un )
{
int d = 0 ;

do {
++d ;
} while ( ( un /= 10 ) > 0 ) ;

return ( d ) ;
}