Vraag over een string xD

Status
Niet open voor verdere reacties.

halsangel

Gebruiker
Lid geworden
20 feb 2005
Berichten
754
Heey ik snap iets niet echt bij cpp..

Wat heeft een string nou eigenlijk voor functie:confused:. Je kan er characters in doen. Maar dat kan toch ook in een variabel?

In de tutorial die ik aan het doen ben stond dit voorbeeld over een string

Code:
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

int main()
{
    char a[10] = "Hallo", b[10] = "Doei";
    strcpy (a, b);
    
    cout <<a <<endl;
    cin.get ();
    
    return 0;     
}

En als ik hem dan compimeer en run, geeft die alleen 'Doei' weer. En wanneer ik strcpy (a, b) weghaal geeft die gewoon Hallo weer...

Kan iemand mij misschien het nut en het principe van een string uitleggen:)

Alvast bedankt:thumb:
 
Heey ik snap iets niet echt bij cpp..

Wat heeft een string nou eigenlijk voor functie:confused:. Je kan er characters in doen. Maar dat kan toch ook in een variabel?

In de tutorial die ik aan het doen ben stond dit voorbeeld over een string

Code:
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

int main()
{
    char a[10] = "Hallo", b[10] = "Doei";
    strcpy (a, b);
    
    cout <<a <<endl;
    cin.get ();
    
    return 0;     
}

En als ik hem dan compimeer en run, geeft die alleen 'Doei' weer. En wanneer ik strcpy (a, b) weghaal geeft die gewoon Hallo weer...

Kan iemand mij misschien het nut en het principe van een string uitleggen:)

Alvast bedankt:thumb:


Eigenlijk spreek je hier van char array vermits er ook een object String bestaat maarja.

Waarom geeft hij hier 'Doei'? Wel de functie strcpy copieert de inhoud van de string b hier naar string a, dus string a heeft dan als waarde 'Doei'...
http://www.cplusplus.com/reference/clibrary/cstring/strcpy.html
voor meer uitleg.

het voordeel van een char array is, dat je een woord of zelf een hele zin kan opslaan en hem dan ook zonder conversie uitprinten.
dit kan je niet in de andere types.

doe maar eens
Code:
double[10] a = "Doei\n";

cout << a <<endl;
 
Laatst bewerkt:
Kan iemand mij misschien het nut en het principe van een string uitleggen:)

Een string is behoorlijk nuttig. Je kunt er zoals je zelf al aangeeft karakters in opslaan. Ik kan me voorstellen dat je helemaal in het begin geen idee hebt wat het nut van een type als een string is, maar als je een goed boek hebt dan wordt het je al snel duidelijk wat het nut van een string is. (bv. om de naam van de gebruiker in te bewaren of om een bestand in te lezen en te kijken of er bepaalde data in staat, etc)

Ga gewoon rustig verder met die tutorial en het wordt je vanzelf wel duidelijk wat het nut van een string is. Succes!
 
Oooo je kan dus iemand dus iets laten opslaan in een string. En het vervolgens later weergeven.:) Maar dat kan toch ook bij een variabel. ??

EDIT @bzub: Maar wat is het nu ervan om de inhoud van string b naar a te copieren. Dan kan je toch net zogoed a de waarde van b geven of a gewoon weglaten..
 
Laatst bewerkt:
Oooo je kan dus iemand dus iets laten opslaan in een string. En het vervolgens later weergeven.:) Maar dat kan toch ook bij een variabel. ??

EDIT @bzub: Maar wat is het nu ervan om de inhoud van string b naar a te copieren. Dan kan je toch net zogoed a de waarde van b geven of a gewoon weglaten..

1. Je kan geen namen opslaan in een variabele.
Als je bijvoorbeeld de gebruiker zijn gevens wilt vragen, Naam, adres, etc..
Dan moet je voor de Naam, de straat en de gemeente wel een string gebruiken.
Vermits je deze toch niet in een double ofzo kan opslaan:S?

2. stel dit voorbeeld:
Ik heb een string a. Nu wil ik dat in deze string a elke i een o wordt, maar ik wil ook dat mijn oude string nog zichtbaar blijft in de rest van het programma.
Dit kan enkel door een nieuwe string te maken die een copy van a bevat en dan in deze nieuwe string de aanpassingen te doen.

Zo'n dergelijke soort situatie komt heel vaak voor. Zeker als ge met lijsten begint te werken en klassen en dergelijken. Dan bewaart ge over het algemeen een kopie van het origineel. Zodat andere functies de originele string wel kunnen manipuleren maar niet de kopie.

Zoals CoD_NL zei, ga verder met de tutorial en als het dan nog niet duidelijk zou zijn dan hebt ge een slechte tutorial:S.

thinking in c++ is trouwens een goed beginnersboek ( gratis te krijgen als e-book )
 
Maar dat kan toch ook bij een variabel. ??
Om even snel iets recht te trekken. Een string is een variabele.
Een variabele is gewoon 'iets' wat je een waarde kan geven. Je kan een variabele een beetje vergelijken met een doos..

In C++ hebben alle variabelen een type. Dit kunnen zowel de standaardtypes zijn (int, double, bool, char,...) als zelfgedefinieerde types (Auto, Wiel, Huis, ....)

--Johan
 
Zoals CoD_NL zei, ga verder met de tutorial en als het dan nog niet duidelijk zou zijn dan hebt ge een slechte tutorial:S.

thinking in c++ is trouwens een goed beginnersboek ( gratis te krijgen als e-book )

De tutorial die ik volg is http://www.wimvpetegem.nl/index.php?p=artikelen deze. En wat is eigenlijk de code dat de code die je geschreven hebt weer vanaf het begin af aan start. Dat heb ik nodig voor zo'n simpel rekenmachintje. XD
 
Laatst bewerkt:
Code:
En wat is eigenlijk de code dat de code die je geschreven hebt weer vanaf het begin af aan start. Dat heb ik nodig voor zo'n simpel rekenmachintje. XD

Ik neem aan dat je een lus bedoelt?
Er zijn daarvoor een aantal mogelijkheden de makelijkste zijn de lustructuren
while(), do{}while() en for( ).

Gebruik:

while( <expressie die zegt wanneer de code uitgevoerd moet worden )>
{
<code>
}

vb:
Code:
i = 0;
while( i < 9 )
{
 cout << i << endl;
 ++i;
}

do
{
<code>
while( <expressie die zegt wanneer de code uitgevoerd moet worden );

vb:
Code:
i = 0;
do
{
  cout << i << endl;
 ++i;
} while( i < 9 );

for( <initialisatie>; <expressie>; <toekenning> )
{
<code>
}

vb:
Code:
for( int i = 0; i < 9; ++i )
{
  cout << i << endl;
}

Deze drie lustructeren doen hetzelfde.
bij de do{} while( ); is op te merken dat <code> steeds 1 keer wordt doorlopen. dus als in het voorbeeld i door 9 wordt vervangen is de do{} while de enigste lus met output.
 
Oke het is nu deels gelukt :P

Maar nu heb ik nog een probleempje :) Ik wil in de code hieronder dat als er niet aan de conditie voldaan wordt, dat die dan "Vul een getal in dat hoger is dan 1000" weergeeft. Dat doet die als het commando DO er NIET bij zit.

Maar nu.... als ik het do commando er bij wil betrekken en "Goed" laten weergeven als het getal hoger dan 1000 is doet die dat niet en geeft die een foutmelding bij het comprimeren:( (zien bijlage).

Wat doe ik fout?:thumb: Alvast bedankt:)

Code:
using namespace std;

int main()

{
    for(int a= 0; a<1000;)
    {
            cout<<"vul een getal in dat hoger is dan 1000"<<endl;
            cin>>a;
    }           
   
    do
    {
        cout<<"Goed";
    }while(a==1000)
}
 

Bijlagen

  • foutmelding.JPG
    foutmelding.JPG
    24,1 KB · Weergaven: 19
Ik snap niet precies wat je aan het doen bent.. Maar ik denk:
- Input vragen
- zolang input kleiner als 1000 is, opnieuw input vragen
- Als groter als 1000 is, zeg dat dat goed is

Code:
int number;

//Vraag input
cout << "Please enter a number larger than 1000: ";
cin >> number;

//Zolang number is kleiner dan 1000
while(number < 1000)
{
  //Vraag opnieuw input
  cout << "Number is not smaller than 1000, enter a new one: ";
  cin >> number;
}

//Zeg dat deze goed is
cout << number << " is larger than 1000.\n"
 
oke dat is gelukt :D maar ik heb die code ook niet voor een programmaatje ofzo nodig.. Het was gewoon om effe uit te testen:) Ik wil die loops eigenlijk voor een rekenmachine gebruiken en daar heb ik een vraagje over...

Als ik aan het einde van elke functie het programmaatje weer helemaal vanaf het begin laten starten. (dus na cout<< "Het antwoord is: "<<b+c;) Hoe doe ik dat, ik heb al een aantal dingen geprobeerd zoals goto, maar op diverse fora hoor ik dat dat niet een goede oplossing is:)

(PS: Ik ben echt nog een amateur, daarom stel ik deze simpele vragen)

Code:
#include <iostream>
#include <cstdio>
#include <stdlib.h>

using namespace std;

int main ()

{
    int keuze, b, c, d, e, f, g, h, i;
    
    cout<<"Dit is een simpel rekenmachientje, kies wat voor berekening je wil maken."<<endl;
    cout<<"1. Optellen"<<endl;
    cout<<"2. Aftrekken"<<endl;
    cout<<"3. Vermenigvuldigen"<<endl;
    cout<<"4. Delen"<<endl;
    cin >> keuze;
    cin.get();
    
    if (keuze == 1)
    {
          cout<<"Vul een getal in "<<endl;
          cin >>b;
          cin.get();
          cout<<"Vul een getal in wat je bij het eerste getal wil optellen "<<endl;
          cin >>c;
          cin.get();
          cout<< "Het antwoord is: "<<b+c; 
          cin.get();
          return 0;
    }
    
    if (keuze == 2)
    {
              cout<< "Vul een getal in "<<endl;
              cin>>d;
              cin.get();
              cout<< "Vul een getal in wat je van het eerste getal wil aftrekken";
              cin>>e;
              cin.get();
              cout<<"Het antwoord is: "<<d-e;
              cin.get();
              return 0;
    }
    
    if (keuze == 3)
    {
              cout<< "Vul een getal in"<<endl;
              cin>>f;
              cin.get();
              cout<< "Vul een getal in waarmee je het eerste getal wil vermenigvuldigen"<<endl;
              cin>>g;
              cin.get();
              cout<< "Het antwoord is "<<f*g;
              cin.get();
              return 0;
    }
              
    if (keuze == 4)
    {
              cout<< "Vul een getal in"<<endl;
              cin>>h;
              cin.get();
              cout<< "Vul een getal in waarmee je het eerste getal wil delen"<<endl;
              cin>>i;
              cin.get();
              cout<< "Het anwoord is "<<h/i;
              cin.get();
              return 0;
    }
    
    else
    
    {
        cout<< "Sukkel!!! Je moet wel een van de nummers 1, 2, 3 of 4 invullen...";
        cin.get();
    }
}
 
Laatst bewerkt:
Hmm dan moet je gewoon zo simpel mogelijk zeggen wat je wilt en kijken hoe je dat in C++ vertaalt :P.

Je wilt dus:
Zolang het waar is dat de functie uitgevoerd moet worden, voer hem uit.

bool functieMoetUitgevoerd = true;
while(functieMoetUitgevoerd)
{
functie();
}

En als je dan wilt dat die functie niet meer uitgevoerd moet worden verander je functieMoetUitgevoerd naar false. ^^

Maar maak voor een vraag die niet bij dit topic hoort een nieuwe thread :P.
 
Laatst bewerkt:
Mag dat dan ?? Anders wordt het zo druk op het forum :P

maar simpeler gezegd(verbeterd):P

Als je de berekening hebt gedaan dat die dan gewoon weer vanaf het begin begint bij dat menutje.
 
Laatst bewerkt:
Als iemand op deze thread klikt omdat ie iets zoekt over strings en dan van alles vind wat niet over strings gaat is dat veel irritanter dan dat er een nieuwe thread in beeld staat waar hij niet op hoeft te klikken als hij daar geen zin in heeft :P.

Maar begrijp je wat ik bedoel met die loop in de vorige post? Dan zal het toch niet zo moeilijk zijn om dat bij je eigen programmaatje te implementeren :P? Als het wel zo is, welk deel loop je vast?

En spellingsfouten ok, maar "gezecht" :P?
 
Laatst bewerkt:
Oke dan maak ik voor m'n volgende vraag wel ff een nieuw topic aan :)

Maar ik snap het nog niet helemaal wat je bedoeld met die loop.
Je maakt dus eerst een boolean variabel aan. Maar wat gebeurd er dan?
 
Een while loop gaat door zolang wat er tussen haakjes staat waar is.
Je begint dus met een boolean die waar is.
Dan blijft hij wat in die while loop staat uitvoeren totdat wat tussen die haakjes staat niet meer waar is.

Code:
bool doorgaan = true;
int keuze;

while(doorgaan == true)   // Kun je ook als while(doorgaan) schrijven
{
  cout << "1 - Vraag nog een keer.\n";
  cout << "2 - Stop met vragen.\n";
  cout << "Maak je keuze: ";
  cin >> keuze;
  
  switch(keuze)
  {
    case 1: /* Doe niks */ break;
    case 2: doorgaan = false; break;
    default: cout << "Valse invoer.\n"; break;
  }
}

Als de gebruiker nu 2 invoert dan stopt hij met de loop want doorgaan is niet waar.
 
Oke ik ben nu al weer wat verder gekomen:) maar het lukt nog niet helemaal...
Want wanneer ik dan die keuzes opschrijf van 1 - optellen, 2 - aftrekken etc. en ik run de applicatie, Ongeacht de keuze die ik maak laat hij het optel-gedeelte zien.

Wat doe ik nu verkeerd:P

Code:
{
    bool opnieuw = true;
    int keuze, a, b, c, d;
    
    while(opnieuw == true)
    {
                  cout<<"Dit is een simpele rekenmachine maak uw keuze: "<<endl;
                  cout<<"1 - Optellen"<<endl;
                  cout<<"2 - Aftekken"<<endl;
                  cout<<"3 - Delen"<<endl;
                  cout<<"4 - Vermenigvuldigen"<<endl;
                  cin>>keuze;
                  
                  switch(opnieuw)
                  {
                                 case 1:
                                      cout<<"Vul een getal in "<<endl;
                                      cin>>a;
                                      cout<<"vul nog een getal in wat je + het eerste getal doet: "<<endl;
                                      cin>>b;
                                      cout<<"Het antwoord is"<<a + b<<endl;
                  }
                                 
                  switch(opnieuw)
                  {               
                                 case 2:
                                      cout<<"vul een getal in "<<endl;
                                      cin>>c;
                                      cout<<"Vul een getal in wat je van het eerste getal wil aftrekken";
                                      cin>>d;
                                      cout<<"Het antwoord is"<<c - d<<endl;
                  }
    }
}
 
Je doet 2x dezelfde switch na elkaar en geen breaks na de case's.
Je kan beide case's dus in 1 switch opnemen en vergeet de break's niet! :)


Edit: daarbij is je switch op de "opnieuw"-variabele, terwijl dit op de "keuze" moet zijn. "opnieuw" is een boolean met waarde true, dus zal ie altijd in de case 1 gaan.
 
Laatst bewerkt:
Oke thnx nu werkt die!!!!:eek::thumb:

(alleen nog 1 laatste vraagje :o als de code met 'while' weer opnieuw begint, hoe kan ik de rest van de code dan laten wissen op het scherm.. Heb al dingen geprobeerd met \r maar dat werkt niet is hier misschien een oplossing voor?:))
 
Volgens mij kon je op Windows system("cls") gebruiken en bij Linux system("clear")
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan