cptCory Skrevet 6. mars 2009 Skrevet 6. mars 2009 (endret) jeg er ny i C++, veldig ny. Så vet da egentlig ikke hva jeg leter etter så lager egen tråd selv om dette skulle finnes fra før. Her er problemet: Eks: int a = 4; int b = 5; int ab = (a ettEllerAnnet b); // vil at variabelen skal holde tallet 45 Hvordan får jeg lagt disse tallene sammen på denne måten? finner ingen operator for det... Håper dere kan hjelpe. Endret 6. mars 2009 av CoreTEC
Gjest Slettet-aNZFa3 Skrevet 6. mars 2009 Skrevet 6. mars 2009 Nå kan ikke jeg mye c++ jeg helller, men kan du ikke prøve på å konverte vært tall til en char og så kombinere dem til en string? Og deretter konvertere den stringen tilbake til int?
cptCory Skrevet 6. mars 2009 Forfatter Skrevet 6. mars 2009 Så langt har jeg ikke kommet enda, så da får jeg lese litt til
PerB Skrevet 6. mars 2009 Skrevet 6. mars 2009 Ingen grunn til å være flau. Har B verdi 10 eller høyere vil metoden ikke virke. Riktig metode er å konvertere begge integer til string og så slå dem sammen for derpå å konvertere dem til integer igjen. Evt håndtere begge variable som string hele tiden.
cptCory Skrevet 6. mars 2009 Forfatter Skrevet 6. mars 2009 Slipper unna med det regnestykket denne gang, både a og b er fra 0-9 hverken mer eller mindre. String og konvertering kommer vel etterhvert, ser på noen videoer og leser litt materiale attåt på 3dbuzz. Håper jeg kommer meg unna med at sene timer sløver hjernen
GeirGrusom Skrevet 6. mars 2009 Skrevet 6. mars 2009 (endret) Dersom du er interessert allikevel, finnes det to andre måter som gjør at tallene kan være større enn 9. Først med string, der en gjør om tall til tekst, men den er ikke så interessant synes jeg. Den andre er den matematiske måten: ab = (int)(a * pow(10, 1 + (int)pow(b, 1.0 / 10.0)) + b); edit: tenkte feil Endret 6. mars 2009 av GeirGrusom
Sokkalf™ Skrevet 6. mars 2009 Skrevet 6. mars 2009 (endret) int a = 4; int b = 5; printf("%c%c\n", a + 0x30, b + 0x30); Er forsåvidt C, men er ihvertfall en kjapp og dirty måte å forvandle en (single digit) int til noe som begynner å ligne på en string.. Endret 6. mars 2009 av Sokkalf^
GeirGrusom Skrevet 6. mars 2009 Skrevet 6. mars 2009 int a = 4, b = 5; int ab = 0; char dst[] = {0, 0, 0}; sprintf(dst, "%c%c", a + 0x30, b + 0x30); ab = atoi(dst); I C?
Dead_Rabbit Skrevet 6. mars 2009 Skrevet 6. mars 2009 Jeg hadde brukt stringstreams. stringstream ss; ss << 4 << 5; string str = ss.str();
LostOblivion Skrevet 6. mars 2009 Skrevet 6. mars 2009 Rart at std::string ikke har constructors for primitivene og operator + for appending...ellers ville jo problemer som dette vært svært trivielle å løse. int main() { int a = 4; int b = 5; std::string fortyfive = string(a) + string(b); /* Denne. */ std::string fiftyfour = string() + a + b; /* Eller denne. */ return 0; }
Sokkalf™ Skrevet 7. mars 2009 Skrevet 7. mars 2009 int a = 4, b = 5; int ab = 0; char dst[] = {0, 0, 0}; sprintf(dst, "%c%c", a + 0x30, b + 0x30); ab = atoi(dst); I C? Når man likevel bruker *printf er det forsåvidt lite poeng i å gjøre det på den måten char dst[] = {0, 0, 0}; sprintf(dst, "%i%i", a, b); ab = atoi(dst);
GeirGrusom Skrevet 7. mars 2009 Skrevet 7. mars 2009 Haha! ja, det er sant! Føler meg veldig dum her nå ^^
zotbar1234 Skrevet 7. mars 2009 Skrevet 7. mars 2009 (endret) Rart at std::string ikke har constructors for primitivene og operator + for appending...ellers ville jo problemer som dette vært svært trivielle å løse.int main() { int a = 4; int b = 5; std::string fortyfive = string(a) + string(b); /* Denne. */ std::string fiftyfour = string() + a + b; /* Eller denne. */ return 0; } Det er nok litt ulurt -- forskjellig semantikk for std::string + <integral type> og array of const char + <integral type>? Det blir mange bra overraskelser da. Når det gjelder std::string(<tall>), hvordan skal tallet representeres? Si, gitt -12343.6571, hva skal innholdet i stringen være? Jeg kunne godt tenkt meg "-12'343.66", men det er jo bare en av mulighetene. edit: grammatikkfeil Endret 8. mars 2009 av zotbar1234
Dead_Rabbit Skrevet 7. mars 2009 Skrevet 7. mars 2009 (endret) Og i tillegg så kan man jo tenke seg at std::string er en slags container og det er derfor ikke helt ulogisk at std::string(n) allokerer n elementer til stringen istedenfor å konvertere tallet til en string. Dette er jo det f.eks. std::list og std:.vector gjør. Endret 7. mars 2009 av Dead_Rabbit
TheMaister Skrevet 6. april 2009 Skrevet 6. april 2009 En funksjon i C++ for å gjøre int om til en string. std::string stringify(int x) { std::ostringstream o; o << x; return o.str(); } f.eks a=1; b=2; string c = stringify(a) + stringify(b); trenger <string> og <sstream>
GeirGrusom Skrevet 6. april 2009 Skrevet 6. april 2009 Det kunne jo vært en std:str_cast klasse for eksempel, men det er ikke egentlig viktig, det finnes jo allerede funksjoner for dette. Hvis en skal henge seg opp i språk semantikken, så er vel ikke dette akkurat et problem område. Men er det egentlig raskere å lage to strings, legge dem sammen og deretter parse dem, enn å bruke et 10-ende rotuttrykk? Har ikke noen C++ compiler tilgjengelig på denne maskinen, så jeg får ikke testet, men logikken min sier at strings er mest effektivt, men jeg har fått overraskelser på sånne ting før.
Mr.Garibaldi Skrevet 6. april 2009 Skrevet 6. april 2009 Fordelen av å ha det i standarden er at det er en ganske vanlig operasjon som da kunne vært optimalisert bedre enn når alle gjør det på forskjellige måter. (Nå kan sikkert compilerne optimisere det likevel, men...)
Hans_Henrik Skrevet 16. april 2009 Skrevet 16. april 2009 (endret) EDIT: original-koden her funket ikke <.< denne fungerer #include <iostream> #include <stdlib.h> int main() { int a=4; int b=5; char MyChar [1]; std::string MyString; itoa(a, MyChar, 10); MyString +=MyChar; itoa(b, MyChar, 10); MyString +=MyChar; std::cout << MyString; return 0; } PS: det er sikkert bedre løsninger postet her allerede Endret 17. april 2009 av Hans_Henrik
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå