Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z atoi i substr()

Ostatnio zmodyfikowano 2017-10-24 20:40
Autor Wiadomość
nanoant20
Temat założony przez niniejszego użytkownika
problem z atoi i substr()
» 2017-10-24 13:32:51
mam takie zadanie
wypisz wszystkie liczby trzycyfrowe, w których suma cyfr jest równa 3
Nie wiem dlaczego otrzymuje niepoprawne wyniki w sumowaniu elementów
błędną mam tą linijkę i nie wiem jak ją poprawić.
Z góry serdecznie dziękuję za każdą pomoc.

C/C++
suma = suma + atoi( tekst[ i ].substr( j, 1 ).c_str() );

C/C++
#include <iostream>
#include <sstream>      //dla stringstream
#include <cstdlib>      //dla atoi

using namespace std;

void koniec();

int main()
{
    //tworzymy tablice string
    string tekst[ 5 ];
    size_t liczba = 100, n = 5, suma = 0;
   
    for( size_t k = 0; k < n; k++ )
    {
        // konwersja int do string'a
        stringstream ss;
        ss << liczba;
        ss >> tekst[ k ];
        liczba++;
    }
   
    for( size_t k = 0; k < n; k++ )
    {
        //odczyt tekstu
        cout << tekst[ k ] << " ";
    }
    //dowod ze jest to string a nie int
    //cout << endl << tekst[1] + tekst[4] << endl;
   
   
    cout << endl << endl;
   
    /*
        for(size_t k = 0; k < n; k++)
        {
            for(size_t i = 0; i < tekst[k].length(); i++)
            {
                for(size_t j = 0; j < 3; j++)
                {
                suma += atoi(tekst[k].substr(i,1).c_str());
                }
            }
            cout << tekst[k] << " elem-> " << tekst[k].length() << " suma elem = " << suma;
            cout << endl;
        }
        */
   
    cout << endl << endl;
   
    for( size_t i = 0; i < n; i++ )
    {
        for( size_t j = 0; j < tekst[ i ].length(); j++ )
        {
            suma = suma + atoi( tekst[ i ].substr( j, 1 ).c_str() );
           
        }
        cout << tekst[ i ] << " ilosc elem-> " << tekst[ i ].length() << " suma elem = " << suma;
        cout << endl;
    }
   
    cout << endl << endl;
    koniec();
    return 0;
}
void koniec()
{
    std::cout << std::endl;
    std::cout << "__________Koniec Programu__________" << std::endl;
    std::cin.get();
    std::cin.get();
}
P-166037
mateczek
» 2017-10-24 13:59:42
taki kod się nada ??:P
C/C++
int main() {
    cout << 111 << 102 << 120 << 210 << 201 << 300;
}
P-166038
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-10-24 14:08:21
@mateczek odpowiedź to ja znam.
Bardziej mnie interesuje ten substr
P-166039
mateczek
» 2017-10-24 14:18:24
subStringi ani "atoi()"  nie są Ci potrzebne. Jeden znak uzyskujesz normalnie jakbyś czytał tablicę


C/C++
#include <iostream>
using namespace std;
int sumaCyfr( const string & napis ) {
    int suma = 0;
    for( size_t i = 0; i < napis.size(); i++ ) {
        suma += napis[ i ] - '0';
    }
    return suma;
}
int main()
{
    string napis = "1234";
    cout << sumaCyfr( napis );
}
P-166040
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-10-24 14:34:34
@mateczek dzięki, nawet nie wiedziałem, że się tak da.
Zrobiłem na szybko ale bez tablicy string i działa, ale dalej nie wiem jak to zrobić na tablicy string

C/C++
#include <iostream>
#include <sstream>      //dla stringstream
#include <cstdlib>      //dla atoi

using namespace std;

void koniec();

int main()
{
   
    string tekst = "127";
    size_t suma = 0;
   
    for( size_t k = 2; k < tekst.length(); k++ )
    {
        //odczyt tekstu
        cout << tekst << " ";
    }
   
    cout << endl << endl;
   
    cout << endl << endl;
    for( size_t i = 2; i < tekst.length(); i++ )
    {
        for( size_t j = 0; j < 3; j++ )
        {
            suma += atoi( tekst.substr( i - j, 1 ).c_str() );
        }
        cout << tekst << " ilosc elem-> " << tekst.length() << " suma elem = " << suma;
        cout << endl;
    }
    cout << endl << endl;
    koniec();
    return 0;
}
void koniec()
{
    std::cout << std::endl;
    std::cout << "__________Koniec Programu__________" << std::endl;
    std::cin.get();
    std::cin.get();
}
P-166041
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-10-24 15:07:26
@mateczek dzięki jeszcze raz za pomoc
Już doszedłem jak to ma być
muszą być 3 pętelki i sumę trzeba było wyzerować
poniżej cały poprawny kod

C/C++
#include <iostream>
#include <sstream>      //dla stringstream
#include <cstdlib>      //dla atoi

using namespace std;

void koniec();

int main()
{
   
    size_t liczba = 100, n = 201, suma = 0;
    //tworzymy tablice string
    string tekst[ n ];
   
    for( size_t k = 0; k < n; k++ )
    {
        // konwersja int do string'a
        stringstream ss;
        ss << liczba;
        ss >> tekst[ k ];
        liczba++;
    }
   
    for( size_t k = 0; k < n; k++ )
    {
        //odczyt tekstu
        cout << tekst[ k ] << " ";
    }
   
    cout << endl << endl;
   
    cout << endl << endl;
    for( size_t k = 0; k < n; k++ )
    {
        for( size_t i = 2; i < tekst[ k ].length(); i++ )
        {
            for( size_t j = 0; j < 3; j++ )
            {
                suma += atoi( tekst[ k ].substr( i - j, 1 ).c_str() );
            }
           
        }
       
        if( suma == 3 )
        {
            cout << tekst[ k ] << " -> " << suma << endl;
        }
        else {
            cout << "";
        }
        suma = 0;
    }
    cout << endl << endl;
    koniec();
    return 0;
}
void koniec()
{
    std::cout << std::endl;
    std::cout << "__________Koniec Programu__________" << std::endl;
    std::cin.get();
    std::cin.get();
}
P-166042
mokrowski
» 2017-10-24 16:48:36
A nie łatwiej sumować "liczbę setek" "liczbę dziesiątek" i "liczbę jedności" ?
C/C++
#include <iostream>

int main() {
    for( auto i = 100U; i < 999; ++i ) {
        auto sum = i % 10 +( i / 10 ) % 10 + i / 100;
        if( sum == 3 ) {
            std::cout << i << ' ';
        }
    }
}
P-166043
nanoant20
Temat założony przez niniejszego użytkownika
» 2017-10-24 18:04:59
@mokrowski dużo prościej, właśnie widzę że przekombinowałem, chociaż rozwiązałem
Dzięki za pokazanie prostszego rozwiązania.
Mam tylko pytanie co oznacza 100U ?
P-166046
« 1 » 2
  Strona 1 z 2 Następna strona