Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Stiskanje raztezanje slova

[es] :: C/C++ programiranje :: C/C++ za početnike :: Stiskanje raztezanje slova

[ Pregleda: 1992 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Stiskanje raztezanje slova05.04.2007. u 19:55 - pre 215 meseci
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]
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Stiskanje raztezanje slova05.04.2007. u 20:51 - pre 215 meseci
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;
}

 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Re: Stiskanje raztezanje slova05.04.2007. u 21:02 - pre 215 meseci
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.
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Stiskanje raztezanje slova05.04.2007. u 21:30 - pre 215 meseci
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"...
 
Odgovor na temu

cyber_killer

Član broj: 90634
Poruke: 95
*.dial-up.dsl.siol.net.



Profil

icon Re: Stiskanje raztezanje slova06.04.2007. u 06:42 - pre 215 meseci
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.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Stiskanje raztezanje slova

[ Pregleda: 1992 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.