char naar int :S

Status
Niet open voor verdere reacties.

CanTBeaTme

Banned
Lid geworden
25 jul 2006
Berichten
235
laat het me eerst eens voorstellen met een voorbeeld :D

Code:
int main ()
{
  char input[1];
  cin >> input[0];
  
  
  int x = static_cast <int> (input[0]);
  cout << x;
   
}


ik weet dat dit juist is, maar het is niet juist in de manier waarop ik het wil...

in dit geval krijg ik het anscii nummer van de input. maar die wil ik niet :s
ik wil , als ik bijvoorbeeld 1 in geef dat die 1 omgezet word naar int, maar dat die int dus ook 1 als waarde heeft ! net zoals de input. . als je snapt wat ik bedoel. (ik wil ermee kunnen rekenen )

hoe doe ik dit? het is voor een groter project bedoelt en dit is echt nodig :)

bedankt voor het helpen
als je de vraag niet snapt wil ik je hem nog wel eens uitleggen:p
 
zoiets:

Code:
char cCijfer = 3;
int iCijfer = cCijfer - 48;

tada!

gr Niek
 
Laatst bewerkt:
wow.. daar had ik nog niet aan gedacht :P
bedankt lol

mr deze regel klopt toch niet altijd? :P kzou een algemene oplossing die altijd werkt willen hebben.

dees werkt alleen voor getallen tot 9.
vanaf getallen tot 99 zou je x/4.8 kunnen doen
enzovoort

maar k zou n algemene oplossing willen. alvast bedankt voor dit. kan ik al een stukje mee verder:)
 
Laatst bewerkt:
Typeconversies, ik heb er ook lang op gezocht. Maar eigenlijk is er een zeer eenvoudige oplossing dmv stringstreams. Onderstaande code voert conversies van elk type naar elk type uit (indien mogelijk natuurlijk)
Code:
#include <iostream>
#include <string>  //stringhandling in de main
#include <sstream>  //het gebruik van de stringstream
using namespace std;

template <class doelType, class inputType>

doelType convert(const inputType & t)
{
    stringstream s;   //een stringstream aanmaken voor zowel lezen als schrijven
    s << t;           //de input in de stringstream plaatsen
    doelType resultaat;  //een variable van het juiste output-type aanmaken
    s >> resultaat;      //de opgeslagen input, naar de output converteren
    s.str("");  //de streaminhoud wissen
    return resultaat;
}

int main()
{
    string s = "18.67";
    double d = convert<double>(s); //geeft d de waarde 18.67
    d -= 2;     //je kan nu gewoon rekenen met d
    cout << "d = " << d << endl
         << "Geef een integer in aub: ";
    cin >> s;    //in de string inlezen
    if (cin.peek()){  //inputbuffer leegmaken
        string rest;
        getline(cin, rest);
    }
    int i = convert<int>(s);
    i -= 2;
    cout << "i = " << i << endl;
    cin.get();
    return 0;
}


Wat in jouw geval misschien ook handig kan zijn is een beveiliging voor het inlezen van een getal:
Code:
int nrchk(string error = "gelieve een geheel getal in te voeren"){
      int g;
      bool failed = true;
      while ( (failed) ){
            if (cin >> g)
                failed = false;
            else{
                failed = true;
                cout << error << endl <<" ";
                cin.clear();
            }
            if ( cin.peek() ){
                 string rest;
                 getline(cin, rest);
            }
      }
      return g;
}
eventueel kan je de while-lus instellen dat hij na 3 pogingen afbreekt ofzo, en deze functie kan je ook aanpassen naar andere types (zeker float en double, andere heb ik nog niet geprobeerd)

--Johan

PS: tenzij je echt op geheugengebruik moet letten raad ik je aan om de stringklasse te gebruiken in plaats van de c-string, vergeet dan wel niet om #include<string> aan je code toe te voegen ;)
 
nou, ik snap het wel maar toch weer niet helemaal (zit nog niet zo ver )


stringstream ken ik wel, k gebruik het als "anticrash" voor simpele nummerike input

stringstream(input) >> x;

dus daar niet van, maar ik werk in mijn project met een string zoals bv "17/10" of "17&12" (andere tekens dan getallen)
met dus die / ertussen dus gebruik ik een array om deze eruit the halen en verder te gaan met de getallen

bv char[3] = een input van user die gelijk is aan 17/10

waarna ik die 17 en die 10 eruit haal en opsla in een int.

dus aan een string heb ik eigelijk niet veel (denk ik toch)

en van templates ken ik nog niks :P dus :P
 
Laatst bewerkt:
een variabele van het type string kan je net als een char-array gebruiken, bvb zo:
Code:
string s = "test";
char c = s[2]; //c == 's'

Ik weet niet of ik je invoer goed begrepen heb, maar mss ben je met deze code iets
Code:
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
using namespace std;

int main()
{
    string input;
    int getallen[3];  //array voor 3 getallen
    for (unsigned int i = 0; i < 3; i++)  //array initialiseren
        getallen[i] = -1;
    cout << "geef 3 getallen: ";
    getline(cin, input);
    unsigned int index = 0;
    for (unsigned int i = 0; i < input.length(); i++){  //zolang we niet op het laatste teken van de string zijn
        if (isdigit(input[i])){ //kijken of het huidige teken een nummer is
            //nummer inlezen via stringstream
            stringstream ss;
            ss << input.substr(i, input.length());
            //nummer opslaan
            if (index < 3) //niet buiten getallenarray gaan
                ss >> getallen[index++];
            else
                break; //getallenarray is vol, uit loop gaan
            while (isdigit(input[i]))//plaats in de inputstring voorbij het ingelezen getal zetten
                i++;
            i--;
            ss.str(""); //stringstream resetten
        }
    }
    for (unsigned int i = 0; i < 3; i++)
        cout << endl << "getal " << i+1 << ": " << getallen[i];
    cin.get();
    return 0;
}
Getest met invoer: "dit is een 1ste test: 23,55 met veel andere tekens &44", geeft dit als resultaat:
Code:
getal 1:  1
getal 2: 23
getal 3: 55

Hopelijk helpt dit,
--Johan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan