Tablice jednowymiarowe. Tworzenie tablicy z innej tablicy. [C]

0

Witam, ślęczę nad tym problemem od kilku godzin i nie mogę, po prostu nie mogę... a bez tego zadania nie ruszę dalej niestety. Bardzo proszę o pomoc.

Napisz program, który pobierze od użytkownika łańcuch tekstowy zawierający wyłącznie małe litery łacińskie oraz cyfry 1..9. Cyfra musi poprzedzać literę i oznacza liczbę powtórzeń litery, która za nią następuje. Program ma zwrócić długość łańcuchu wynikowego, a w następnej linii sam ciąg wynikowy wypisany od końca. Długość ciągu wejściowego nie przekroczy 100 znaków, a długość ciągu wynikowego nie przekroczy 200 znaków.
Przykład:
"a3b1aaabzdury5z3y" --> "abbbaaabzduryzzzzzyyy"

moje wypociny:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char tablica[100] = "c3abb";
    char tablica_wyjsciowa[200];
    int rozmiar = strlen(tablica);
    int i, j, t = 0;
    int liczba_powtorzen = 0;
    char litera;

    for(i = 0; i < rozmiar; i++)
    {
        if(isalpha(tablica[i]))
        {
            tablica_wyjsciowa[t] = tablica[i];
            t++;
        }

        if(isdigit(tablica[i]))
        {
            liczba_powtorzen = (int) tablica[i];
            litera = tablica[i+1];
            for(j = 0; j < liczba_powtorzen; j++)
            {
                tablica_wyjsciowa[t] = litera;
                t++;
            }
            i += liczba_powtorzen - 1;
        }
    }

    printf("%s", tablica);
    printf("\n%s", tablica_wyjsciowa);

    return 0;
}
0

Przy ustalaniu liczby powtórzeń chyba miałeś na myśli to ;)

liczba_powtorzen = tablica[i] - '0';
0
Potat0x napisał(a):

Przy ustalaniu liczby powtórzeń chyba miałeś na myśli to ;)

liczba_powtorzen = tablica[i] - '0';

pozostałość po tysiącach poprawek - co nie zmienia faktu, że i tak się krzaczy i nie jest tak jak powinno być. ;c

0

Jeżeli spotkaliśmy cyfrę na miejscu i, to powtarzamy odpowiednią liczbę razy literę stojącą na miejscu i+1. liczba_powtorzen nic do tego nie ma.

i += liczba_powtorzen - 1;//wiec tu wystarczy zwiekszyc o 1

Dobrze jest też wyzerować coś, zanim zaczniesz tam zapisywać

char tablica_wyjsciowa[200] = {'\0'};
0

Udało się... co prawda jest trochę nasyfione, ale nie chcę już tego poprawiać, bo boję się, że popsuję ;|

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main(int argc, char *argv[])
{
    const int max1 = 100;
    const int max2 = 200;

    char tablica[100] = "a3b1aaabzdury5z3y";
    char tablica_wyjsciowa[200] = {"\0"};

    int i, j, t = 0;
    int liczba_powtorzen = 0;
    char litera;

    for(i = 0; i < max1; i++)
    {
        if(isalpha(tablica[i]))
        {
            tablica_wyjsciowa[t] = tablica[i];
            t++;
        }

        else if(isdigit(tablica[i]))
        {
            liczba_powtorzen = ((int) tablica[i]) - 49;
            litera = tablica[i+1];
            for(j = 0; j < liczba_powtorzen; j++)
            {
                tablica_wyjsciowa[t] = litera;
                t++;
            }
        }
        else
            break;
    }

    printf("%s", tablica);
    printf("\n%s", tablica_wyjsciowa);

    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1