Konwersja z int do string okazuje się trudniejsza niż być powinna.

Odpowiedz Nowy wątek
2014-12-15 20:56
0

Dobry wieczór, mam za zadanie napisać funkcję liczącą bardzo duże liczby, do tej pory napotkałem na problem którego nie mogę rozwiązać - konwersja z int na string. Oto moja funkcja, przy kompilacji wychodzi mi [Error] cannot convert 'std::basic_ostringstream<char>::__string_type {aka std::basic_string<char>}' to 'char' in assignment. Wiem, że istnieją łatwiejsze algorytmy, ale chciałem napisać swój. Pomoże ktoś, czego nie rozumiem tutaj?

#include <iostream>
#include <cstdarg>
#include <string>
#include <sstream>
#include <cstdlib>
using namespace std;
 
string sum( int iloscLiczb, string *tablica)
    {
        int przeniesienie = 0; //bedzie zapisywac przeniesione cyfry
        int dlugoscSumy;
        int dlugoscCyfry;
        int k; // ilosc cyfr mniejszej  liczby
        int p; // ilosc cyfr wiekszej liczby 
        int pomocnicza; // zapisuje wynik dodawania aktualnych dwoch liczb
        string suma = "0"; // zapisuje aktualny wynik dodawania
        int k1; // pomocnicze
        int p1;
        int a;          
        ostringstream convert;       
        for ( int i = 0; i < iloscLiczb; i++ )
            {
                dlugoscSumy = suma.length();
                dlugoscCyfry = tablica[i].length();
                if ( dlugoscSumy <= dlugoscCyfry)
                    {
                        k = dlugoscSumy;
                        p = dlugoscCyfry;
                        k1 = k - 1; //indeksy cyfr
                        p1 = p - 1; // indeksy cyfr
                        for ( int j = p - 1; j >= k - 1; j-- )
                            {
                                pomocnicza =  ( int ) tablica[i].at(p1) - 48 + ( int ) suma.at(k1) - 48 + przeniesienie;
                                convert << pomocnicza; 
                                if (  pomocnicza > 9 )
                                    {
                                        przeniesienie = 1;
                                        suma.at(k1) = pomocnicza / 10;
                                    }
                                else 
                                    {
                                        suma.at(k1) = convert.str();
                                        przeniesienie = 0;
                                    }                   
                                k1--;
                                p1--;
                            }
                    }
                else
                    {
                        k = dlugoscCyfry;
                        p = dlugoscSumy;
                        k1 = k - 1;
                        p1 = p - 1;
                        for ( int j = p - 1; j >= k - 1; j-- )
                            {
                                pomocnicza =  ( int ) tablica[i].at(p1) - 48 + ( int ) suma.at(k1) - 48 + przeniesienie;
                                if (  pomocnicza > 9 )
                                    {
                                        przeniesienie = 1;
                                        suma.at(k1) = pomocnicza / 10;
                                    }
                                else 
                                    {
                                        suma.at(k1) = pomocnicza;
                                        przeniesienie = 0;
                                    }                   
                                k1--;
                                p1--;
                            }
                    }
                przeniesienie = 0;
            }
            return suma;
    }
edytowany 1x, ostatnio: Apprentice, 2014-12-15 21:00

Pozostało 580 znaków

2014-12-15 21:00
2014-12-15 21:01
1

suma.at(k1) = convert.str();
zamień na:

  1. suma+=convert.str();
  2. suma[k1]=convert.str()[0];

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-12-15 21:01

Pozostało 580 znaków

2014-12-15 21:03
0

@up Działa, alleluja, dziękuje za pomoc.

Ale przekombinowałeś niemożebnie! - _13th_Dragon 2014-12-15 21:05
w sensie z algorytmem? xd - Apprentice 2014-12-15 21:10
Nie, z kartami do gry. - _13th_Dragon 2014-12-15 21:12

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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