Toon posts:

[C++] converteren van string naar char

Pagina: 1
Acties:
  • 185 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
voor mij examen c++ ben ik een binaire boom aan het schrijven. Ik heb een switch geschreven die met strings of char moet werken. Strings wil hij helemaal niet aanvaarden, char wel. Nu is mijn vraag hoe kan ik een string omzetten in een char?

bedankt

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een char is 1 teken, een string is een reeks van tekens. Je kunt niet switchen op strings, alleen op integral types (char, short, int, long, enum, wchar_t)

Je zult het dus met een opsomming van if-then-else statements moeten doen (ik zie de relevantie met je boomstructuur alleen niet echt)

[ Voor 3% gewijzigd door .oisyn op 29-05-2004 17:33 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Plaagje
  • Registratie: April 2002
  • Laatst online: 20-05 15:19

Plaagje

<<Fly & Dive>>

Ik moest ook zoiets hebben voor mySQL (een char reeks dan misschien kan je er iets mee)
(Dit werkt in ieder geval in borland C++)
code:
1
2
3
4
    for(int iTeller = 1; iTeller <= sBuffer.Length(); iTeller++)
        {
                cMySQLCommand[strlen(cMySQLCommand)] = sBuffer[iTeller];
        };

met sBuffer als je String, en cMySQLCommand[128] je char reeks...

Het zou wel makkelijker kunnen maar dat weet ik nog niet :)

[ Voor 7% gewijzigd door Plaagje op 29-05-2004 17:36 ]

Flying High!


Verwijderd

Topicstarter
't is een binaire boom waar ik gegevens in voer via een rekenkundige uitdrukking in prefix notatie. Dus de nodes van mijn boom bevatten of een operator (+,-,*,/,%) of een waarde (integer). Deze operant of waarde zit in een string (een var dus). Wanneer ik zeker ben dat er een operant in waarde zit wil ik dus via een switch de bewerkingen bij de juiste operant zetten:


code:
1
2
3
4
5
6
7
        switch(node->waarde){
            case '+': resultaat = berekennode(n->pLinks) + berekennode(n->pRechts); break;
            case '-': resultaat = berekennode(n->pLinks) - berekennode(n->pRechts); break;
            case '*': resultaat = berekennode(n->pLinks) * berekennode(n->pRechts); break;
            case '/': resultaat = berekennode(n->pLinks) / berekennode(n->pRechts); break;
            default: cout << "boe"; break;
        }



Nu als ik de operanden aanduid met "+" ipv '+' dan krijg ik alleen maar fouten??? Wanneer ik met char werk niet. Ik ben zeker dat in het veld een char zit. Waarom kan ik die string dan niet in een char steken, of desnoods de eerste letter van de string (automatisch de operand)???

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nu als ik de operanden aanduid met "+" ipv '+' dan krijg ik alleen maar fouten???
Wat zeg ik nou net: Je kunt niet switchen op strings, alleen op integral types. Iets tussen dubbele quotes levert een char * op, en daar kun je dus niet op switchen.

Aangezien een string opgebouwd is uit chars kun je er dus wel een char uithalen. Geen idee wat voor strings je gebruikt (char *, std::string, String, CString, ...), maar over het algemeen kun je ze allemaal behandelen als een array. Als str zo'n string is, krijg je het eerste karakter dus met str[0].

Maar waarom sla je het dan uberhaupt op in string variabelen, en niet gewoon in chars?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Bedoel je c_str()? Zoals in

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
  string aap = "noot";
 
  const char *mies = aap.c_str();
 
  cout << mies;

  return 0;
}

Verwijderd

Topicstarter
bedankt, ik zal het zo eens proberen. De reden waarom ik string gebruik ipv char is omdat ik in diezelfde var ook getallen moet kunnen opslaan bv "123" in een char kan je zo grote getallen niet opslaan.

Sja ik kan er niet veel aan doen, zo is de opgave. Op school moet je geen nuttige programma's schrijven of vragen waarom het zo moet het moet gewoon zo :( Het enige nu is om te leren programmeren ...

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 22-05 14:17
Verwijderd schreef op 29 mei 2004 @ 18:55:
bedankt, ik zal het zo eens proberen. De reden waarom ik string gebruik ipv char is omdat ik in diezelfde var ook getallen moet kunnen opslaan bv "123" in een char kan je zo grote getallen niet opslaan.

Sja ik kan er niet veel aan doen, zo is de opgave. Op school moet je geen nuttige programma's schrijven of vragen waarom het zo moet het moet gewoon zo :( Het enige nu is om te leren programmeren ...
Met binaire bomen een rekenmachine maken is imo best nuttig. Zo zie je tenminste dat het best knap is hoe men ooit een formulaire rekenmachine heeft kunnen maken. Maar goed, beetje offtopic dit...

zeroxcool.net - curity.eu


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Je bent in C++ aan het werken, dus gebruik OO in plaats van dit soort handmatige dingen!

Wat je nodig hebt is een expression base class, met een virtual int value() functie. "123" kun je dan representeren met een simpele constant class. constant::value() retourneert dan die 123. Een andere class die van expression inherit is binary_function, en daar inherit class plus weer van. Een binary_function class heeft twee sub-expression objecten; bijvoorbeeld constant(123) en constant(50). plus::value() is dan 173.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 29 mei 2004 @ 18:55:
Sja ik kan er niet veel aan doen, zo is de opgave. Op school moet je geen nuttige programma's schrijven of vragen waarom het zo moet het moet gewoon zo :( Het enige nu is om te leren programmeren ...
Ik denk dat de opgave dan gewoon een beetje verkeerd begrepen hebt. Zie de opmerking van MSalters, zo moet je dat doen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Kijk hier anders eens naar, vrij oude code van mij, compiled ook niet zonder andere headers etc, maar het laat wel het idee zien hoe je dit zou op moeten lossen.

http://www.cs.vu.nl/~fasmit/funcboxes.h

http://www.cs.vu.nl/~fasmit/funcomp.h

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom zoveel pointers? FunctionComposite::_children bijvoorbeeld, een pointer is daar toch compleet overbodig? Je hebt bovendien geen copyconstructor geimplementeerd, maar je delete die _children wel in de destructor. Je voelt de bui al hangen natuurlijk

[ Voor 40% gewijzigd door .oisyn op 29-05-2004 23:00 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

.oisyn schreef op 29 mei 2004 @ 22:59:
Waarom zoveel pointers? FunctionComposite::_children bijvoorbeeld, een pointer is daar toch compleet overbodig? Je hebt bovendien geen copyconstructor geimplementeerd, maar je delete die _children wel in de destructor. Je voelt de bui al hangen natuurlijk
Ja het is erg oud, volgens mij heb ik het ook nooit afgemaakt. Dus ik kan je het waarom niet vertellen :) Waarschijnlijk dacht ik toen nog dat dat zo moest :P Ging om het ontwerp principe.
Pagina: 1