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

Tablica automatycznie wypełniona znakami

Object Storage Arubacloud
0 głosów
1,387 wizyt
pytanie zadane 19 sierpnia 2017 w C i C++ przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Witam,

na wstępie dodam iż jestem po dniu intensywnej pracy z C++ więc możliwe że rozwiązanie jest banalna ale ja już nie mam świeżego oka to znalezienia rozwiązania.

 

Wykonuję zadanie z książki Symfonia C++ (J.Grębosz) jestem przy temacie z tablicami a za zadanie mam z 1 tablicy w której jest jakieś zdanie przekopiować do 2 innych tablic zawartość tego zdania z podziałem na znaki o indeksie parzystym i nieparzystym.

 

Tak wygląda deklaracja moich tablic i możliwe, że tutaj wystarczy coś zmienić bo debuger podpowiada że na starcie już mam dziwne wartości (później są one tylko nadpisywane)

	char napis[] = "Alfabet sklada sie z wielu znakow";
	char tabParz[17];
	char tabNieparz[17];

 

A tutaj podaję cały kod, wiem, że fragmentami jest on zbyt bardzo skomplikowany i da się to zrobić prościej ;)

#include <iostream>

using namespace std;
void zadanie18(char zrodlo[], char parzyste[], char nieprzyste[]);
void printAr(char tab[]);

int main()
{
	char napis[] = "Alfabet sklada sie z wielu znakow";
	char tabParz[17];
	char tabNieparz[17];

	zadanie18(napis, tabParz, tabNieparz);
	cout << "Glowna tablica: \t";
	printAr(napis);
	cout << "\nParzyste: \t";
	printAr(tabParz);
	cout << "\nNieparzyste: \t";
	printAr(tabNieparz);

	system("PAUSE");
}
void printAr(char tab[])
{
	int i = 0;
	while (tab[i])
	{
		cout << tab[i];
		i++;
	}
	cout << endl;
}


void zadanie18(char zrodlo[], char parzyste[], char nieprzyste[])
{
	static int i, licznikParzyst, licznikNieparzysty;
	for (i = 0; (zrodlo[i]); i++)
	{

		if (zrodlo[i] != 0)
		{

			if (i % 2)
			{
				nieprzyste[licznikNieparzysty] = zrodlo[i];
				licznikNieparzysty++;
			}
			else
			{
				parzyste[licznikParzyst] = zrodlo[i];
				licznikParzyst++;
			}
		}
		else break;
	}
}

 

1 odpowiedź

+1 głos
odpowiedź 19 sierpnia 2017 przez vector Dyskutant (9,200 p.)
wybrane 15 marca 2020 przez Paweł Nąckiewicz
 
Najlepsza
char tabParz[17];
char tabNieparz[17];

Te tablice nie są globalne i nie są zainicjalizowane więc zawierają jakieś losowe śmieci w sobie które zostały w ramie co powoduje że ta petla

while (tab[i])

nigdy sie nie zatrzyma, aby to naprawić wystarczy że dodasz na samym końcu funkcji zadanie18 ręcznie terminatory ciągu.

void zadanie18(char zrodlo[], char parzyste[], char nieprzyste[]) {
	static int i, licznikParzyst, licznikNieparzysty;
	for(i = 0; (zrodlo[i]); i++) {

		if(zrodlo[i] != 0) {

			if(i % 2) {
				nieprzyste[licznikNieparzysty] = zrodlo[i];
				licznikNieparzysty++;
			} else {
				parzyste[licznikParzyst] = zrodlo[i];
				licznikParzyst++;
			}
		} else
			break;
	}
	nieprzyste[licznikNieparzysty] = '\0';  // TUTAJ
	parzyste[licznikParzyst]       = '\0';  // TUTAJ
}

Dodatkowo parzystych znaków w tablicy 33 znakowej jest 17 a licząc z termiatorem masz 18 znaków które musisz przechować w tablicy czyli powinieneś również zmienić rozmiar tablicy przechowującej znaki parzyste.

//Edit

Nie wiem dlaczego piszesz funkcje do wypisywania tablicy ciągów skoro std::cout sobie z tym świetnie radzi.

cout << napis << endl;
cout << tabParz << endl;
cout << tabNieparz << endl;
komentarz 19 sierpnia 2017 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
Takiego rozwiązania się nie spodziewałem a przyznam, że jest banalne :)

Dzięki za pomoc

Podobne pytania

0 głosów
0 odpowiedzi 952 wizyt
0 głosów
1 odpowiedź 680 wizyt
0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 7 grudnia 2022 w C i C++ przez Janchess Początkujący (480 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...