problem z atoi i substr()
Ostatnio zmodyfikowano 2017-10-24 20:40
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. suma = suma + atoi( tekst[ i ].substr( j, 1 ).c_str() );
#include <iostream> #include <sstream> #include <cstdlib>
using namespace std;
void koniec();
int main() { string tekst[ 5 ]; size_t liczba = 100, n = 5, suma = 0; for( size_t k = 0; k < n; k++ ) { stringstream ss; ss << liczba; ss >> tekst[ k ]; liczba++; } for( size_t k = 0; k < n; k++ ) { cout << tekst[ k ] << " "; } cout << endl << 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(); }
|
|
mateczek |
» 2017-10-24 13:59:42 taki kod się nada ??:P int main() { cout << 111 << 102 << 120 << 210 << 201 << 300; } |
|
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 |
|
mateczek |
» 2017-10-24 14:18:24 subStringi ani "atoi()" nie są Ci potrzebne. Jeden znak uzyskujesz normalnie jakbyś czytał tablicę #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 ); }
|
|
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 #include <iostream> #include <sstream> #include <cstdlib>
using namespace std;
void koniec();
int main() { string tekst = "127"; size_t suma = 0; for( size_t k = 2; k < tekst.length(); k++ ) { 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(); }
|
|
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 #include <iostream> #include <sstream> #include <cstdlib>
using namespace std;
void koniec();
int main() { size_t liczba = 100, n = 201, suma = 0; string tekst[ n ]; for( size_t k = 0; k < n; k++ ) { stringstream ss; ss << liczba; ss >> tekst[ k ]; liczba++; } for( size_t k = 0; k < n; k++ ) { 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(); }
|
|
mokrowski |
» 2017-10-24 16:48:36 A nie łatwiej sumować "liczbę setek" "liczbę dziesiątek" i "liczbę jedności" ? #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 << ' '; } } }
|
|
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 ? |
|
« 1 » 2 |