String feature?

Status
Niet open voor verdere reacties.

Yoema

Gebruiker
Lid geworden
28 dec 2007
Berichten
10
hi,
kan iemand me uitleggen hou ik uit een string woorden kan halen die dmv een spatie, punt of puntkomma zijn begrensd?

vb string: Een auto; het heeft.

antw:
een, auto, het, heeft.

Hopelijk is mijn uitleg duidelijk.
 
ik denk dat daar wel een functie voor is maar ik herrinder me hem niet meer ( c++ is al zeer lang geleden)
 
Zou je voor me kunnen nagaan welke functie precies, want ik heb zelf geprobeerd maar ben nog niet zo ervaren.

So please share your knowledge....
 
Volgens mij is er niet echt een standaard functie die doet wat jij zoekt, dus zou je een functie moeten schrijven die doet wat je wilt. Denk goed na wat de functie moet doen, en probeer het eerst zelf eens. Mocht het niet lukken dan horen we dat vanzelf wel.
 
Volgens mij is er niet echt een standaard functie die doet wat jij zoekt, dus zou je een functie moeten schrijven die doet wat je wilt. Denk goed na wat de functie moet doen, en probeer het eerst zelf eens. Mocht het niet lukken dan horen we dat vanzelf wel.

Inderdaad; een paar functies die je zou kunnen gebruiken zijn oa strchr voor het zoeken van de tekens en euhh, dat was het eigenlijk wel.

Je zou gewoon de tekens kunnen vervangen met een null teken, dan heb je de string als het ware doorgeknipt. Moet je alleen de pointers nog goed zetten.
 
#include <string.h>
#include <iostream.h>
using namespace std;
int main ()
{
char *p, s[] = "31/12-1999---23.59 uur";
int n=0, len, i;
len = strlen(s);
p = strtok(s, " /.,;-");
while (p != NULL)
{
cout << p << ";";
p = strtok(NULL, " /.,;-");
}
for (i=0; i<=len; i++)
if ( s == '\0') n++;
cout << "\nEr zijn " << n
<< " woorden in array s.\n";
system ("pause");
return 0;
}

ik denk dat ik met dit concept mijn probleem kan oplossen, alleen kan ik het niet compileren.:evil:

De uiteindelijke programma zal niet met char werken, maar met string dat door de gebruiker wordt ingevoerd om uiteindelijk de woorden te tellen van de ingevoerde tekst.
 
In de cctype header zit de functie isalpha() waar je misschien ook wat aan hebt.

Code:
vector<string> haalWoordenUit(const string& str) {
  vector<string> vecWoorden;
  string         strWoord;
  
  // loop door elk karakter in de string
  for (string::size_type i = 0; i < str.length(); i++) {
    if (isalpha(str[i])) { // als het karakter een letter is
      strWoord += str[i]; // voeg het karakter toe aan het woord
    } else { // een niet-letter tegengekomen
      if (strWoord != "") { // we willen geen niet bestaande woorden toevoegen
        vecWoorden.push_back(strWoord); // voeg woord toe aan vector
        strWoord = ""; // we beginnen aan een nieuw woord
      }
    }
  }
  
  return vecWoorden;
}
 
HI,
het lukt niet om je script te runnen, want ik krijg errors

kan je me aub helpen hiemee.

ik gebruik Borland CBuilder.
 
@Yoema: heb je de juiste headers toegevoegd ?
 
denk het niet.
kan je me aangeven welke headers ik moet gebruiken.

thanx.
 
Code:
#include <iostream>
#include <vector>
#include <string>

using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;

vector<string> haalWoordenUit(const string& str);

int main()
{
  string zin("!#En-ze   leefden(*@nog lang en*( gelukkig#");
  
  vector<string> woorden = haalWoordenUit(zin);
  
  for (vector<string>::const_iterator i = woorden.begin(); i != woorden.end(); i++) {
    cout << *i << endl;
  }
  
  cin.get();
  
  return 0;
}

vector<string> haalWoordenUit(const string& str) {
  vector<string> vecWoorden;
  string         strWoord;
  
  // loop door elk karakter in de string
  for (string::size_type i = 0; i < str.length(); i++) {
    if (isalpha(str[i])) { // als het karakter een letter is
      strWoord += str[i]; // voeg het karakter toe aan het woord
    } else { // een niet-letter tegengekomen
      if (strWoord != "") { // we willen geen niet bestaande woorden toevoegen
        vecWoorden.push_back(strWoord); // voeg woord toe aan vector
        strWoord = ""; // we beginnen aan een nieuw woord
      }
    }
  }
  
  return vecWoorden;
}
 
weetje dat ik een error krijg met die isalpha. ik kan het zelf niet vinden.
maar weet je mischien hoe ik een gebruiker kan laten ivoeren in een scherm, zijn of haar tekst, maar dat in code zo het opsgeslagen worden in een array.

met een string kan ik het wel doen, maar alleen weet ik niet hoet ik daaarvan een woorden teller van maakt.

THanx,
Yoema
 
Wat voor error?

En is het de bedoeling om de woorden alleen te tellen? Dan kun je het stuk waar we het woord in de vector<string> stoppen weglaten en vervangen door code die 1 bij een teller optelt.
 
HI,

error message:
[C++ Error] Unit1.cpp(34): E2268 Call to undefined function 'isalpha'

tav de executable dat ik in C++ wil maken, volge hier de info:
de gebruiker moet een stuk tekst kunnen invoeren (string). De executable dient aan te geven hoeveel woorden in de tekst voorkomen. De Woorden kunnen van elkaar gescheiden zijn door spaties, komma’s, dubbele punt, puntkomma’s en punt.

ik heb dit ervan gemaakt:

#include <iostream>
#include <string>

using namespace std;
int main ()
{
char *p;
string s;
getline (cin, s);
int n=0, len
while (p != NULL)
{
cout << p << ";";
p = strtok(NULL, " /.,;-");
}
for (i=0; i<=len; i++)
if ( s == '\0') n++;
cout << "\nUw ingevoerde tekst bestaat uit " << n
<< " woordem\n";
system ("pause");
return 0;
}

maar kijg de volgende errors:
[Linker Error] Unresolved external '__InitVCL' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl

[Linker Error] Unresolved external '__ExitVCL' referenced from D:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl

kan je me aub hierop adviseren.

Regards,
Yoema
 
Moet je per se strtok() gebruiken?

Anders kun je toch een string inlezen, elk karakter erin doorlopen en voor elk karakter dat spatie, punt, komma, dubbele punt of punt komma is 1 bij het aantal woorden optellen? (Dan moet wel de input perfect kloppen, dus geen twee komma's achter elkaar en de zin eindigt met een punt etc.)
 
via google: http://www.codepedia.com/wiki/printer.aspx?WikiID=1&p=CppBuilderLinkingErrors
[Linker Error] Unresolved external '__InitVCL' referenced from [..]

This error occurs, because you want to work in a console application, but you started a Builder application in the Console Wizard. Do 'File | New | Other | Console Wizard'. In this menu, uncheck 'Use VCL'. 'Console Application' should be checked, 'Multi Threaded' and 'Use CLX' should be unchecked.



[Linker Error] Unresolved external '__ExitVCL' referenced from [..]

This error occurs, because you want to work in a console application, but you started a Builder application in the Console Wizard. Do 'File | New | Other | Console Wizard'. In this menu, uncheck 'Use VCL'. 'Console Application' should be checked, 'Multi Threaded' and 'Use CLX' should be unchecked.
Ik weet niet of dit je linker probleem oplost, ik heb zelf een andere compiler/ide.
Voor isalpha() moet je wel #include <cctype> in je .cpp neerzetten.
 
Moet je per se strtok() gebruiken?

Anders kun je toch een string inlezen, elk karakter erin doorlopen en voor elk karakter dat spatie, punt, komma, dubbele punt of punt komma is 1 bij het aantal woorden optellen? (Dan moet wel de input perfect kloppen, dus geen twee komma's achter elkaar en de zin eindigt met een punt etc.)

Hoe doe ik het bovenstaande ?

ik heb dit ervan gemaakt:
#include <cctype>
#include <iostream>
#include <vector>
#include <string>

using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::endl;

vector<string> haalWoordenUit(const string& str);

int main()
{
string zin;
getline (cin, zin);


vector<string> woorden = haalWoordenUit(zin);

for (vector<string>::const_iterator i = woorden.begin(); i != woorden.end(); i++) {
cout << *i << endl;
}

cin.get();

return 0;
}

vector<string> haalWoordenUit(const string& str) {
vector<string> vecWoorden;
string strWoord;

// loop door elk karakter in de string
for (string::size_type i = 0; i < str.length(); i++) {
if (isalpha(str)) { // als het karakter een letter is
strWoord += str; // voeg het karakter toe aan het woord
} else { // een niet-letter tegengekomen
if (strWoord != "") { // we willen geen niet bestaande woorden toevoegen
vecWoorden.push_back(strWoord); // voeg woord toe aan vector
strWoord = ""; // we beginnen aan een nieuw woord
}
}
}

return vecWoorden;
}


Heb je ook enig idee hoe ik de gebruiker oneindig veel tekst kan laat invoeren en dan nog de woorden daarvan kan tellen?

FYI,
Yoema
 
Dat kan toch al (maar misschien begrijp ik je verkeerd :P)? En om het aantal woorden te krijgen kun je vector<string>::size() callen.

By the way, wat ik eerst zei wat je misschien kan doen werkt niet, aangezien na een komma een spatie hoort te komen en dan zou hij een woord teveel tellen.

En stop aub je code tussen de [ CODE] [ /CODE] tags.. ^^
 
Laatst bewerkt:
:)Hoe zou de code eruit kunnen zien als de gebruiker oneindig veel tekst invoerd en ik daarvan de woorden laat tellen.

Hopelijk is dat begrijpelijk:thumb:,
Yoema
 
Zolang hij niet op Enter drukt kan hij toch oneindig tekst in blijven voeren?
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan