Cześć, jestem początkujący, dlatego potrzebowałbym Waszej pomocy. Przerabiam kurs od zera do bohatera Mirosława Zelenta na yt. Dodatkowo zaczynam robić zadnka ze SPOJ-a. W jednym z nich potrzebuję zamienić łańcuch znaków (w którym liczby są przedzielone spacją ) na tablicę liczb. Próbowałem już na różne sposoby, napisałem dwa programy i każdy z nich nie działa.
Te wszystkie couty itd. w moich programach to dlatego, że starałem się znaleźć błąd, i sprawdzałem jak program działa.
Pierwszy z nich:
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
int main() {
char liczba_przed_konwersja[20];
string przyklad,przyklad2;
for (;;)
{
cout<<"Podaj: "<<endl;
getline(cin,przyklad2);
przyklad=przyklad2;
int dlugosc_inta;
int a=0;
double liczba=0;
int *tablica_liczb;
int ile=0;
przyklad=przyklad + " ";
tablica_liczb = new int [przyklad.length()/2];
int b=0;
cout<<przyklad.length()<<endl;
char * tablica = new char[przyklad.length()-1];
strcpy( tablica, przyklad.c_str() );
delete [] tablica;
if (tablica[0]==' ')
{
cout<<"prawda"<<endl;
}
for (int i=0;i<przyklad.length();i++)
{
cout<<tablica[i]<<"!";
b++;
}
cout<<"Przyklad.length"<<przyklad.length()<<endl;
cout<<"B. "<<b<<endl;
cout<<endl;
for (int i=0;i<przyklad.length();i++)
{
cout<<"for2"<<endl;
liczba_przed_konwersja[a]=tablica[i];
a++;
if (tablica[i]==' ')
{
cout<<"if 1"<<endl;
for (int i=0;i<a-1;i++)
{
cout<<"a: "<<a<<endl;
cout<<"potega"<<pow(10,(a-2-i))<<endl;
liczba+=(liczba_przed_konwersja[i]-48)*pow(10,(a-2-i));
cout<<i<<". "<<liczba<<endl;
}
ile++;
*tablica_liczb=liczba;
cout<<"teraz"<<endl;
cout<<liczba<<endl;
a=0;
liczba=0;
tablica_liczb++;
}
}
delete [] tablica_liczb;
tablica_liczb-=ile;
cout<<"!!!!"<<endl;
for (int i=0;i<ile;i++)
{
cout<<*tablica_liczb<<endl;
tablica_liczb++;
}
}
return 0;
}
Nie utworzyłem tutaj nawet tablicy, bo program nie działa prawidłowo tzn, np. w drugiej pętli obcina pierwszy znak.
drugi z nich: (myślę, że lepiej napisany, przejrzyściej - nim się zajmijmy):
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
int main() {
char liczba_przed_konwersja[20];
string przyklad,przyklad2;
for (;;)
{
cout<<"Podaj: "<<endl;
getline(cin,przyklad2);
przyklad=przyklad2;
int dlugosc_inta;
int a=0;
double liczba=0;
int *tablica_liczb;
int ile=0;
przyklad=przyklad + " ";
tablica_liczb = new int [przyklad.length()/2];
int b=0;
cout<<przyklad.length()<<endl;
char * tablica = new char[przyklad.length()-1];
strcpy( tablica, przyklad.c_str() );
delete [] tablica;
if (tablica[0]==' ')
{
cout<<"prawda"<<endl;
}
for (int i=0;i<przyklad.length();i++)
{
cout<<tablica[i]<<"!";
b++;
}
cout<<"Przyklad.length"<<przyklad.length()<<endl;
cout<<"B. "<<b<<endl;
cout<<endl;
for (int i=0;i<przyklad.length();i++)
{
cout<<"for2"<<endl;
liczba_przed_konwersja[a]=tablica[i];
a++;
if (tablica[i]==' ')
{
cout<<"if 1"<<endl;
for (int i=0;i<a-1;i++)
{
cout<<"a: "<<a<<endl;
cout<<"potega"<<pow(10,(a-2-i))<<endl;
liczba+=(liczba_przed_konwersja[i]-48)*pow(10,(a-2-i));
cout<<i<<". "<<liczba<<endl;
}
ile++;
*tablica_liczb=liczba;
cout<<"teraz"<<endl;
cout<<liczba<<endl;
a=0;
liczba=0;
tablica_liczb++;
}
}
delete [] tablica_liczb;
tablica_liczb-=ile;
cout<<"!!!!"<<endl;
for (int i=0;i<ile;i++)
{
cout<<*tablica_liczb<<endl;
tablica_liczb++;
}
}
return 0;
}
Program działa pięknie, dopóki łańcuch znaków, który podaję przez cin nie przekroczy długości 9. Pętla jest nieskończona tylko do testów.
created
last reply
- 12
replies
- 1.5k
views
- 3
users
- 1
like
- 5
links