Gå til innhold

Anbefalte innlegg

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 av CoreTEC
Lenke til kommentar
Videoannonse
Annonse

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.

Lenke til kommentar

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 ;)

Lenke til kommentar

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 av GeirGrusom
Lenke til kommentar

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;
}

Lenke til kommentar
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 :p

 

char dst[] = {0, 0, 0};
sprintf(dst, "%i%i", a, b); 
ab = atoi(dst);

Lenke til kommentar
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 av zotbar1234
Lenke til kommentar

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 av Dead_Rabbit
Lenke til kommentar
  • 5 uker senere...

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.

Lenke til kommentar
  • 2 uker senere...

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 av Hans_Henrik
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...