[C++] Konwersja stringa na double'a

mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Witam, mam taki problem.
Otóż wczytuje dane z pliku. Za pomocą:

Kod: Zaznacz cały

while (! plik.eof() )
        {
            getline(plik,linia[i],);
            std::cout << linia[i] << std::endl;
            i++;
           }
Gdzie linia to tablica stringów. Następnie chce te stringi przekonwertować na double,
tutaj funkcja:

Kod: Zaznacz cały

double zamiana(std::string str)
{
    std::stringstream ss;
    double liczba;
    ss << str;
    ss >> liczba;
    return liczba;
}
Noi niestety, ale wynik nie jest poprawny. Dodam, że przeglądając linie odczyt z pliku jest poprawny,
ale po konwersji na double jest zły.
Proszę o pomysły i porady. Pozdrawiam.
Ostatnio zmieniony 24 gru 2011, o 19:14 przez Afish, łącznie zmieniany 1 raz.
Powód: Tagi w temacie.
abc666

[C++] Konwersja stringa na double'a

Post autor: abc666 »

Jak wyświetlasz sobie potem tego doubla? Ustawiłeś setprecision() ?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Wrzucam wszystko do vectora

Kod: Zaznacz cały

for(int k=0;k<dane.size();k++)
    {
        danedouble.push_back(zamiana(dane[k]));
        std::cout << danedouble[k] << std::endl;
I próbuje je wypisać. Setprecision nie ustawiałem.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] Konwersja stringa na double'a

Post autor: wawek91 »

Co to znaczy, że po konwersji jest zły? Wypisuje krzaki? Ucina cyfry czy co robi? A może w ogóle się nie kompiluje?
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Z pliku wczytuje 6 cyfr. Do stringa ładnie je wszystkie zapisuje po kolei.
Jednak po konwersji na double zostają tylko 4 cyfry i w tym tylko 1(pierwsza) jest poprawna, reszta to jakieś
totalne bzdury, cyfry w ogóle nie przypominają tych ze stringa.

Takie pytanie w pliku liczby zapisane są w ten sposób np:

-1.234 4.124
2.242 12.213
22.12 9.43

Jak je czytam getlinem to on zapisuje do stringa razem z tą spacją pomiędzy?
Jak wypisuje stringa to jest wszystko ładnie, każda liczba jest osobno.
Jednak po konwersji na double tylko -1.234 jest taka sama jak w stringu, reszta jest inna.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] Konwersja stringa na double'a

Post autor: wawek91 »

Tak wczytuje razem ze spacją czyli Twój string z getline wygląda wtedy tak "-1.234 4.124" dla 1 linii itd. Spróbuj czy dobrze w ogóle działa Twoja konwersja jeśli każda liczbę dasz w innej linii. Jeśli wtedy się coś spieprzy to może gdzieś indziej w kodzie jest błąd. Jeśli z kolei tych liczb jest tam w cholerę to możesz wczytywać jak wczytujesz, ale wcześniej musisz sparsować każdego stringa, żeby Ci dzielił na dwa mniejsze dzieląc napotykając spacje.
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Ale jeżeli ja zapisuje po kolei tego stringa do tej listy. I potem ją pętlą wyświetlam to każda liczba jest osobno. Czyli nie czyta mi tego tak jak piszesz: "-1.234 4.124" tylko lista[1]="-1.234", lista[2]="4.124"
itd. Dopiero przy konwersji pojawia się błąd.

Sory nie lista tylko linia.



Pytanie troche z innej beczki. W jaki sposób odczytać ten plik, żeby liczby zapisać bezpośrednio do doubla?
Pozdrawiam.
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] Konwersja stringa na double'a

Post autor: wawek91 »

Nie no ja dobrze powiedziałem tylko teraz zauważyłem, że to Ty wrzuciłes do getline separator spacji wg którego ma rozdzielać wyrazy. Spróbuj moze jeszcze tak:

Kod: Zaznacz cały

while (! plik.eof() )
        {
            getline(plik,napis,);
            double liczba = zamiana(napis);
            std::cout << liczba << std::endl;
            danedouble.push_back(liczba);
            i++;
           }
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Ciągle ten sam problem! Już nie mam pojęcia. Mój kod:
Ukryta treść:    
Dane wejściowe są tak jak wyżej. Czy możecie mi podać jakiś sposób na poprawny odczyt tych danych. Dzięki.

Sprawdziłem nawet na intach. I jest ten sam problem.
abc666

[C++] Konwersja stringa na double'a

Post autor: abc666 »

Dlaczego czytasz dane z pliku getlinem?

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main() {

std::fstream plik("dane.txt");
std::vector <double> danedouble;
double tmp;
while(plik >> tmp) {
	std::cout << tmp << "
";
	danedouble.push_back(tmp);
}
plik.close();

return 0;
}
mikkuexc
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 19 maja 2011, o 20:33
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 5 razy

[C++] Konwersja stringa na double'a

Post autor: mikkuexc »

Sprawdzałeś to co napisałeś? Bo program się kompiluje ale nie odczytuje żadnych danych. Puste czarne okno.

Ok zwracam honor. Nie utworzyłem pliku.
ODPOWIEDZ