kopiowanie wyrazow tablica

0

Zadanie:
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 funkcję, 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.

I czemu mi dobrze nie działa taki program: (wyświetla wyrazy ale po nich dziwne kreski)

#include <iostream>
using namespace std;

void funkcja(char source[],char parzyste[],char nieparzyste[]);

int main()
{
	char source[] = { "Uwaga jest znaczaca bez znaczenia!" };
	char parzyste[200], nieparzyste[200];
	funkcja(source,parzyste,nieparzyste);
	cout << "Nieparzyste : " << nieparzyste << endl;
	cout << "Parzyste : " << parzyste << endl;

	system("pause");


}

void funkcja(char source[],char parzyste[],char nieparzyste[])
{
	bool parzystosc = false;
	int i = 0;
	for(int n = 0,p = 0; ; i++)
		{
			if(parzystosc == false) {nieparzyste[n] = source[i];n++ ;}
			if(parzystosc == true)  {parzyste[p] = source[i];p++ ;}

			if(source[i] == ' ') { parzystosc = !parzystosc; }
			if(source[i] == 0)   { break; }
	
		}

}
 
0

parzysty wyraz to ten, który jest parzysty w zdaniu. Jak mam zdanie "Ala ma kota" to wyrazy parzyste to "ma"

1

masz tablice char, ktora;

  1. nie jest zainicjalizowana, wiec posiadasz tam smieci
  2. nie wpisujesz znaku konca lini na koniec tych wyrazow dlatego program wypisuje te znaki dopoki nie napotka "\n"

rozwiazanie? Po calej tej petli na samym koncu dodaj cos takiego

tablica1[n+1] = "\0";
tablica2[p+1] = "\0";

oczywiscie musisz znac n i p czyli musisz je wyniesc po za petle

wtedy bedzie dzialac, ale zeby nabrac dobrych zachowan. Zainicializuj poprawnie te dwie tablice charow

0

wyświetla wyrazy ale po nich dziwne kreski

Wyczyść (wyzeruj) zawartość tablic parzyste oraz nieparzyste przed pisaniem do nich.

0

Fasadin czyli jak moje tablicę się nazywają parzyste i nie parzyste to na końcu dodać:

nieparzyste[n+1] = "\n";
	parzyste[p+1] = "\n";

I skąd wiedzieć jakie wartości przypisać dla p i n po za pętlą ?

I co do inicjalizacji tablicy to dla tablicy source[] nadać odpowiednio ilość elementów ?

0

sprawdz zamiast sie pytac.
powiedzialem Ci skad masz wiedziec
masz zainicjalizowac wszystko to co nie jest zainicializowane

0

Bo próbuje teraz rozwiązać ten problem i nie mogę. Teraz mam coś takiego i nie wiem jak zainicjować te obiekty p i n po za pętlą.
Obecnie mam coś takiego:

#include <iostream>
using namespace std;
 
void funkcja(char source[],char parzyste[],char nieparzyste[]);
 void drukuj_tablice(char t[]) ;
int main()
{
    char source[35] = { "Uwaga jest znaczaca bez znaczenia!" };
    char parzyste[20], nieparzyste[20];
    funkcja(source,parzyste,nieparzyste);
    cout << "Nieparzyste : " << nieparzyste << endl;
	cout << "Parzyste : " << parzyste << endl;
 
    system("pause");
 
 

}
 
void funkcja(char source[],char parzyste[],char nieparzyste[])
{
    bool parzystosc = false;
    int i = 0;
    for(int n = 0,p = 0; ; i++)
        {
            if(parzystosc == false) {nieparzyste[n] = source[i];n++ ;}
            if(parzystosc == true)  {parzyste[p] = source[i];p++ ;}
 
            if(source[i] == ' ') { parzystosc = !parzystosc; }
            if(source[i] == 0)   { break; }
			
 
        }
	int n ,p ;
	nieparzyste[n+1] = '\n';
    parzyste[p+1] = '\n';

}
 
0

Teraz mam coś takiego i nie wiem jak zainicjować te obiekty p i n po za pętlą.

Po prostu zadeklaruj je poza pętlą? :|

0

cytuje samego siebie

"oczywiscie musisz znac n i p czyli musisz je wyniesc po za petle"

czytaj moj post dopoki tego nie rozwiazesz. Tam masz wszystko co potrzebujesz

to co teraz robisz wola pomste do nieba. Powiedz mi jakie wartosci maja n i p skoro tak ja zadeklarowales (i nie zainicjalizowales...)

0

to w tym kodzie zadeklarowałem je po za pętlą for. A co do deklaracji dwóch tablic parzyste i nie parzyste to jak je zadeklarować skoro nie wiem ile będą mieć elementów.
Chyba jestem głupi.

0

coś takiego ? :

void funkcja(char source[],char parzyste[],char nieparzyste[])
{
    bool parzystosc = false;
    int i = 0, n = 0 , p = 0 ;
    for(n,p ; ; i++)
        {
            if(parzystosc == false) {nieparzyste[n] = source[i];n++ ;}
            if(parzystosc == true)  {parzyste[p] = source[i];p++ ;}
 
            if(source[i] == ' ') { parzystosc = !parzystosc; }
            if(source[i] == 0)   { break; }
			
 
        }

	nieparzyste[n+1] = '\n';
    parzyste[p+1] = '\n';

}
0

glupoty gadasz

http://ideone.com/f58yhz

to jest Twoj kod...

0

U mnie nadal są znaczki oto dowód:

user image

2
    nieparzyste[n+1] = '\0';
    parzyste[p+1] = '\0';
0

ok dzięki jest lepiej ale nie wiem czemu zostaję jeszcze jeden taki znak, przecież miał być koniec C-Stringu to skąd tam ten element, screen:
user image

1

Te +1 są w sumie zbędne, ponieważ w swoim kodzie inkrementujesz po przypisaniu elementu do tablicy - nie zauważyłem tego wcześniej.

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