Wątek przeniesiony 2014-08-07 23:12 z C/C++ przez ŁF.

Kopiowanie co drugiej litery z tablicy

0

Chciałem napisać program który kopiuje co drugą literę z tablicy do tablicy. Podczas kompilacji nie ma błędu, natomiast jak odpalam program wyskakuje błąd. I nie wiem czy mam problem z kodem programu czy z visual studio.
Kod:

#include <iostream>
using namespace std;
void kopiowanie(char oryginal[],char podroba[]);
 
int main()
{
    char tablica1[] = { "instytut" };
    char kopia[10];
 
    kopiowanie(tablica1,kopia);
 
    system("pause");
}
void kopiowanie(char oryginal[],char podroba[])
{
    for(int i = 0,k = 0;i < strlen(oryginal) ; i + 2,k++)
    {
        podroba[k] = oryginal[i];
        if(podroba[k] == 0) break;
 
    }
 
 
} 
1

Rozczaruję Cię, ale to nie z Visual Studio masz problem ;p.

Zainteresuj się funkcją strcat - http://pl.m.wikibooks.org/wiki/C/strcat

1
for(int i = 0,k = 0; ; i + 2,k++)

i Ci się nie zmienia w pętli. BTW naprawdę warto poznać debugera i odpalić go, od razu byłoby widać co jest nie tak.

1

Nawet jak poprawisz na i += 2, i tak będziesz miał problem przy napisach z nieparzystą liczbą znaków (w najlepszym przypadku będzie off by one, lecz możesz również wywalić cały program/ujawnić dane ze stosu/sterty).

0

Czemu taki program jest niepoprawny:

#include <iostream>
#include <cstring>
using namespace std;
void kopiowanie(char oryginal[],char podroba[]);
 
int main()
{
    char tablica1[] = { "instytut" };
    char kopia[10];
 
    kopiowanie(tablica1,kopia);
 
    system("pause");
}
void kopiowanie(char oryginal[],char podroba[])
{
    for(int i = 0,k = 0;i < strlen(oryginal) ; i = i + 2,k++)
    {
        podroba[k] = oryginal[i];
        if(podroba[k] == 0) break;
 
    }
 
 
} 
0

Bo wartość w i się nie zmienia przy iteracji pętli. Powinno być i += 2. I to nie jest jedyny problem.

0

Czemu taki program jest niepoprawny:

W przypadku nieparzystej liczby znaków w tablicy wejściowej niewstawiony zostanie null terminator.
Poza tym ma złożoność kwadratową (to nie klasyfikuje go jako "niepoprawnego", ale z całą pewnością dyskwalifikuje z konkursów typu SPOJ :P).

0

podczas kompilacji nie pokazuje, żadnego błędu , a po włączeniu programu pokazuje:

The program '[2644] testowy.exe: Native' has exited with code 0 (0x0).

Co w nim należy poprawić?

0
#include <iostream>
#include <cstring>
using namespace std;
void kopiowanie(char oryginal[],char podroba[]);
 
int main()
{
    char tablica1[] = { "instytut" };
    char kopia[10];
 
    kopiowanie(tablica1,kopia);
 
    system("pause");
}
void kopiowanie(char oryginal[],char podroba[])
{
    for(int i = 0,k = 0;i < strlen(oryginal) ; i =i + 2,k++)
    {
        podroba[k] = oryginal[i];
        if(podroba[k] == 0) break;
 
    }
 
 
} 
 
2

No przecież program działa tak, jak napisałeś.
Kopiuje ciąg znaków i... i tyle, nawet go nie wyświetla, tylko od razu brnie w kierunku końca maina :P

0

A jakiego działania oczekujesz? Nie masz żadnej instrukcji wypisującej zawartość którejkolwiek tablicy, to co może Ci się pokazać na wyjściu.

0

dobra działa jak należy, nie zauważyłem że w funkcji main nie dałem cout << kopia

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