• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Opus magnum Grębosza - zadanie z 3 tablicami

VPS Starter Arubacloud
0 głosów
262 wizyt
pytanie zadane 19 lutego 2020 w C i C++ przez Tomcio2000 Użytkownik (900 p.)

Witam, mam problem z zadaniem z książki "Opus magnum" pana Grębosza
Otóż jego polecenie to
Mamy tablicę znaków, w której znajduje się długi C-string będący tekstem, składającym się z kilkunastu wyrazów. Napisz funkcje, która przekopiuje ten C-String do dwóch innych tablic. W tablicy parzyste znaleźć mają się parzyste wyrazy C-stringu, a w tablicy nieparzyste – nieparzyste wyrazy C-stringu. W obu docelowych tablicach wyrazy mają być oddzielone odstępami(spacjami), czyli znakami ' '. Funkcja ta ma być wywoływana z trzema argumentami:
- adres tablicy źródłowej,
- adres tablicy na wyrazy parzyste,
- adres tablicy na wyrazy nieparzyste.
Nie wiem dlaczego mój program nie działa i brakuje mi pomysłu na niego. Mógłby ktoś pomóc? Niedawno zacząłem naukę programowania. Oto mój kod.

#include <iostream>
using namespace std;
void kopiuj(char zro[], char parz[], char nieparz[]);
void wyswietl(char tabl[]);
int main()
{
    char zrodlo[200] = {"Raz dwa trzy cztery piec szesc siedem osiem dziewiec dziesiec jedenascie dwanascie trzynascie czternascie"};
    char parzyste[200];
    char nieparzyste[200];
    kopiuj(zrodlo, parzyste, nieparzyste);
    cout << "Wyrazy parzyste:\n ";
    wyswietl(parzyste);
    cout << "\n\nWyrazy nieparzyste:\n";
    wyswietl(nieparzyste);
    cout << endl;
    return 0;
}

void kopiuj(char zro[], char parz[], char nieparz[])
{
    for (int i = 0; ; i++){
        if(zro[i]!=char(32)) nieparz[i] = zro[i];

        if (nieparz[i] != char(32)){
            for(; ; i++){
                nieparz[i] = zro[i];
            }

        }
        if (parz[i] != char(32)) parz[i]=zro[i];{
            for(; ; i++){
                parz[i] = zro[i];
                if(parz[i] == char(32)) break;
            }

        }

        if (parz[i] == 0 || nieparz[i] == 0)break;
    }

}

void wyswietl(char tabl[])
{
    for (int i = 0; ; i++){
        cout << tabl[i];
        if (tabl[i] == 0)
            break;
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 19 lutego 2020 przez j23 Mędrzec (195,220 p.)

Pod rozwagę:

    char zrodlo[200] = "Raz dwa trzy cztery piec szesc siedem osiem dziewiec dziesiec jedenascie dwanascie trzynascie czternascie";
    char parzyste[200];
    char nieparzyste[200];
    
    int z = 0, np = 0, p = 0; 
    
    while (zrodlo[z]) {
        while ((nieparzyste[np++] = zrodlo[z]) && zrodlo[z++] != ' ') {}
        while ((parzyste[p++] = zrodlo[z]) && zrodlo[z++] != ' ') {}
    }
    
    nieparzyste[np] = 0;
    parzyste[p] = 0;
    
    std::cout << nieparzyste << '\n';
    std::cout << parzyste << '\n';

 

Podobne pytania

+1 głos
0 odpowiedzi 829 wizyt
pytanie zadane 14 listopada 2019 w C i C++ przez reaktywny Nałogowiec (42,140 p.)
0 głosów
0 odpowiedzi 294 wizyt
0 głosów
2 odpowiedzi 5,293 wizyt

92,967 zapytań

141,931 odpowiedzi

321,163 komentarzy

62,299 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...