[ cyber_killer @ 05.04.2007. 19:55 ] @
Zadaca mi je: napisati program koji stisne rjeci na ovakav nacin.Napisem npr.aaaaBbbbbbddd -------> izpis bi trebo biti ovakav a4Bb4d3 sto znaci 4 slova 'a', jedno veliko slovo 'B' itd.To sam uspio i radi tako za slova tako i za brojeve,al mi se pojavlja problem kad bi htio onda to raztegnuti znaci da dodje u provotni oblik.
Kad dadnem npr. a4b4c4d4 mi izpise samo 4444 umjesto 4 'a',4 'b'... itd.Molim cimprije ako se more jer sutra moram tu zadacu pokazati.

Evo moj kod:


Code:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define DUZ 1024

void razsiri(char *niz){

    int i,j;
    int broj=0;
    int duzinaNiza=strlen(niz);
    for(i=0;i<duzinaNiza;i++){

        if(isalpha(niz[i]) !=0) {

            if(isdigit(niz[i+1]) != 0 ){
                while(isdigit(niz[i+1]) == 0)
                    broj=broj*10+niz[i];

                for(j=0;j<broj;j++)
                    printf("%c",niz[i]);
                broj=0;
               }
            else
                printf("%c",niz[i]);
        }

        else
            printf("%c",niz[i]);

    }
}

int main(){
    int i;
    int br=1;
    char niz[DUZ];

    printf("Unesi string: \n");
    scanf("%s",niz);

    int duzinaNiza=strlen(niz);

    for(i=0;i<duzinaNiza;i++){

        if(isalpha(niz[i])!=0) {
            if(niz[i+1]==niz[i]) {
                br++;

            }
            else{
                if(br==1)
                    printf("%c",niz[i]);
                else
                    printf("%c%d",niz[i],br);
                br=1;
                  
            }
            
        }
        else
            printf("%c",niz[i]);
    }
    char niz2 [DUZ];
    printf("\n");
    printf("Unesi stisnuti niz:\n");
    scanf("%s",niz2);
    printf("\n");
    razsiri(niz2);
    
    return 0;
}


[Ovu poruku je menjao cyber_killer dana 06.04.2007. u 07:43 GMT+1]

[Ovu poruku je menjao cyber_killer dana 06.04.2007. u 07:44 GMT+1]
[ SuPeR_MaSteR @ 05.04.2007. 20:51 ] @
Evo prijatelju samo za tebe:
Code:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define DUZ 1024

char* skupi(char* a);
char* rasiri(char* a);

int main()
{
    char niz[DUZ];
    printf("\nUnesi niz: ");
    scanf("%s",niz);
    printf("\nSkupljeno: %s", skupi(niz));
    printf("\nRasireno: %s", rasiri(niz));
    return 0;
}

char* skupi(char* a)
{
    int duz = strlen(a), i, j;
    char novi[DUZ];
    for (i = 0, j = 0; i < duz; i++)
    {
        int p, brojac;
        for (p = i+1, brojac = 1; a[p] == a[i]; brojac++, p++);
        novi[j++] = a[i];
        if (brojac > 1)
        {
            novi[j++] = brojac+'0';
            i += brojac-1;
        }
    }
    novi[j] = '\0';
    strcpy(a, novi);
    return a;
}
char* rasiri(char* a)
{
    int duz = strlen(a), i, j;
    char novi[DUZ];
    for (i = 0, j = 0; i < duz; i++)
    {
        if (isdigit(a[i]))
        {
            int k;
            for (k = a[i]-'0'; k > 1; k--)
               novi[j++] = a[i-1];
        }
        else
           novi[j++] = a[i];
    }
    novi[j] = '\0';
    strcpy(a, novi);
    return a;
}

[ cyber_killer @ 05.04.2007. 21:02 ] @
woooov.super si.kakva brzina.ali jesil probo zasto u mojoj kodi to neradi,to mi bi bilo najvaznije.A ako ne uspijem do sutra,onda cu probati sa tvojom kodom ali najradije bi vidio da dodjem sa svojom.

Inace bas sam od tebe i ocekivo pomoc.Hvala ti sto si uzmes vremena i sto mi pomazes kod moji zadaca.
[ SuPeR_MaSteR @ 05.04.2007. 21:30 ] @
Imas ti dosta gresaka, uglavnom oko tog brojaca i petlji (tj. ispitivanja elemenata niza)
Proveri, ne radi ti dobro ni "skupljanje" niza. Kada unesem na primer "adkkal" , izbaci mi "adk2a2l2" a trebao bi "adk2al"...
[ cyber_killer @ 06.04.2007. 06:42 ] @
Cudno ali meni stiskanje radi normalno.Probo sam i za tvoj primjer.Naso sam gresku nisam dobro prepravio kodu,jer ja sam iz Slovenije pa to radim na slovenski jezik i onda sam malo pogrjesio kod variabili i to.
Evo ispravio sam gornji kod,bila je jedna variabilna netocno napisana.Uglavnem preveo sam opet ali meni stiskanje radi.Samo jos da to raztezanje ispravim i pobjedeli smo.