Problem z ćwiczeniem o tablicach z "Symfonii C++"

0

Treść ćwiczenia: "Mamy dwie identyczne tablice znakowe o identycznej długości. W każdej z nich znajduje się C-string. Napisz funkcję, która przekopiuje co drugą literę z jednej tablicy do drugiej. To znaczy: jeśli w jednek tablicy jest tekst "instytut", to w drugiej powinien znaleźć się C=string "isyu". Wybaczcie, jeśli kod będzie trochę nieczytelny, ale uczę się od niecałych dwóch tygodni. Mam takie coś:

#include <iostream>
using namespace std;
char tab1[11]={"Ziemniaki"};
char tab2[11];

void wydrukuj(char tablica[ ])  
{
	for(int i=0; ;i++)
	{
		cout<<tablica[i];
		if (!tablica[i])
		{
			break;
		}
	}
}

void kopiuj2(char zrodlo[],char cel[])
{
	for(int i=0;;i++)
	{
		if(!(i%2))
		{
			cel[i]=zrodlo[i];
		}
		
		if (!zrodlo[i])
		{
			break;
		}
	}
}

int main()
{
	wydrukuj(tab1);
	cout<<endl;
	kopiuj2(tab1,tab2);
	wydrukuj(tab2);
	system("Pause");
}

I po przetestowaniu z tablicy drugiej pokazuje się tylko "Z". Co robię źle? W tej chwili przyszło mi do głowy, że może tablica skopiowała się jako "Z e n a i", i funkcja "wydrukuj" przerywa pracę, bo po z następuje null. Jeśli mam rację, to jak to naprawić? Dodać inną zmienną typu int dla tablicy tab2?

0
char tab2[11];

Na:

char tab2[11]={"        "};

I pozbądź się system("pause")...

0

spróbuj tak:

void kopiuj2(char zrodlo[],char cel[])
{
        int i;
        for(i=0;zrodlo[i];i++)
        {
                if(!(i%2))
                {
                        cel[i/2]=zrodlo[i];
                }
        }
       cel[(i+1)/2]=0;
}
0

Okej, czyli jednak chodziło o to o czym myślałem. Po chwili kombinowania zmieniłem funkcję kopiuj na coś takiego i działa jeszcze lepiej.

void kopiuj2(char zrodlo[],char cel[])
{
	int y=0;
	for(int i=0;;i++)
	{
		if(!(i%2))
		{
			y++;
			cel[y]=zrodlo[i];
		}
		
		if (!zrodlo[i])
		{
			break;
		}
	}
}

Dziękuję za pomoc

EDIT: W chwili odpowiadania nie widziałem postu krwq, tamto też działa

0

Witam! Ja ten program zrobiłem w sposób przedstawiony poniżej. Problemem jest to że na końcu uzupełnioną tablice "cel" wyświetlić można
tylko z wnętrza pętli for. O co chodzi?

// worked.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
#include <iostream>
#include <string>
#include<conio.h>
using namespace std;
char copy(char orgl[],char cel[]);
//************************************
 
char orgl[9]={"instytut"};
char cel[9];

int main()
{
	cout<< "program wykorzysta, co druga litere z oryginalnej tablicy"<<endl;
	 copy(orgl,cel);
	  cout<<cel;
       cout<<endl;
	    getch();
}
//*******************************************************
char copy(char orgl[],char cel[])
{		
for (int i=0;i<9;i+=2)
{
	orgl[i];
	for(int j=0;j<1;j++)
	{
		cel[j];
	    cel[j]=orgl[i];
	}
	 cout<<cel;
}
	return 0;
}
//******************************************************
0

Noo, to teraz wszystko się uprościło :P :)

0

Zmień wiersz:

char cel[9];

na:

char cel[]="* - Absolutnie nie kumam czym sa tablice\n";

i uruchom.

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