Toon posts:

[c++] string naar int?

Pagina: 1
Acties:
  • 45 views sinds 30-01-2008

Verwijderd

Topicstarter
Beste mensen,

Ik ben bezig met een gezellig programmaatje waarmee ik een beetje c++ probeer te leren. Nu lees ik een regel uit een bestand naar een string, en deze regel bevat een getal (een int). Het is de bedoeling dat de functie die de regel uit het bestand leest, die int retourneert (by reference), maar ik heb natuurlijk een string! Hoe converteer ik nu een string (waar een nummer inzit, bijv "12") naar een int (12), en hoe controleer ik (dat is ook wel slim) of die string echt wel een nummer is (en niet bijvoorbeeld "blaat")?

Verwijderd

Voor deze en andere basic C++ vragen Kijk eens op:
http://www.parashift.com/c++-faq-lite

(Specifieker: http://www.parashift.com/...isc-technical-issues.html)

[ Voor 32% gewijzigd door Verwijderd op 05-04-2004 13:49 ]


  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 26-05 22:24

PromWarMachine

Forsaken Archer

Dat heet typecasting... GoT search & Google helpen je verder. :)

Eerste link...

Dividend for Starters


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

itoa en atoi zijn de functies die je zoekt.

Siditamentis astuentis pactum.


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 13:13

Reptile209

- gers -

Kijk eens naar functies als atoi() en vriendjes. De string-lib heeft er allerlei standaard klassen en functies voor (dacht ik). Of maak het zelf!
C:
1
2
3
4
5
6
7
8
  // s is je stringpointer
  int i=0;
  while ((*s>='0') && (*s<='9'))
  {
    i *= 10; 
    i += *s - '0';      
   s++;
  }

Effe voor de vuist weg, maar snap het idee iig :)

Stel: s = "12345", dan doet je lus:
i = 0 * 10 = 0
i += 0 + 1 = 1
i = 1 * 10 = 10
i += 10+2 = 12
etc.

[ Voor 15% gewijzigd door Reptile209 op 05-04-2004 13:50 ]

Zo scherp als een voetbal!


Verwijderd

Topicstarter
gcc kent atoi() en vriendjes niet :(, maar je gaat me toch niet vertellen dat 'standaard' c++ dit niet zelf kan?

  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

atoi() zit toch echt in de standaard library...

volgens man atoi:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
NAME
     atoi -- convert ASCII string to integer

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <stdlib.h>

...

STANDARDS
     The atoi() function conforms to ISO/IEC 9899:1990 (``ISO C89'').

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 09:46

Robtimus

me Robtimus no like you

atoi() zit idd in stdlib.h, itoa() helaas niet.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 26-05 23:14
De standaardoplossing in C++ is met een stringstream:
C++:
1
2
3
4
5
6
7
8
9
10
#include <sstream>
int main()
{
    std::stringstream ss("123");
    int i;
    if(ss >> i)
        ;   // it worked! \o/
    else
        ;   // failed! handle error.
}

Merk op dat invoer als "blaat" failed (daar valt geen int uit te halen) maar dat iets als "12blaat" wel werkt, aangezien in dat geval alleen de getallen gematcht worden (en i wordt dan 12). Je kan trouwens zien of dit het geval is door achteraf ook te controleren of je stringstream leeg is (ss.eof()).

[ Voor 31% gewijzigd door Soultaker op 05-04-2004 14:15 ]


Verwijderd

Topicstarter
Die stringstream werkt perfect! Tnx guys!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

itoa is geen standard C, en verder is dit allemaal wel iets te basic en in tutorials te vinden en zo :)

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.