Niin, eli millä tavalla oikein saisin c++:ssa yhdistettyä kahden int-muuttujan arvon yhdeksi uudeksi int-muuttujaksi? Esimerkiksi jos minulla on muuttujat int luku1 = 2 ja int luku2 = 2, niin int luku3:sen tulisi olla 22. Miten tuo olisi kätevintä tehdä?
Merkkijonovirroilla onnistuu seuraavasti:
#include <sstream> #include <string> #include <iostream> using namespace std; int yhdista(int eka, int toka) { int kolmas = 0; ostringstream os; os << eka << toka; string tmp = os.str(); istringstream is(tmp); is >> kolmas; return kolmas; } // esimerkki int main() { int a = 39; int b = 3; cout << yhdista(a, b) << endl; // tulostuu "393" return 0; }
Jos numeroilla haluat leikkiä, niin laskukaava on tälläinen:
luku3 = luku1 * 10Int(log luku2)+1 + luku2
Ja tässä on samaan kaavaan liittyvä ohjelma:
int a = 123, b = 456; int c; int k = 10; while (k <= b) k *= 10; c = a * k + b; printf("%i\n", c);
Luvut voidaan yhdistää kertomalla a sopivalla kymmenen potenssilla ja lisäämällä tulokseen b. Sopiva kymmenen potenssi löytyy katsomalla, mikä on pienin kymmenen potenssi, joka on b:tä suurempi. Esim. kun a = 123 ja b = 456, pienin b:tä suurempi kymmenen potenssi on 1000 ja 123 * 1000 + 456 = 123456.
Kiitoksia kaikille vastanneille. :)
Voihan sitä myös leikkiä itoa:lla ja atoi:lla =)
C:llä merkkijonovirtoja vastaava menetelmä:
char str[21]; sprintf(str, "%d%d", a, b); sscanf(str, "%d", &c); printf("Ja katso, %d%d = %d.\n", a, b, c);
Aihe on jo aika vanha, joten et voi enää vastata siihen.