string zählen

partitionist

Erfahrenes Mitglied
ich will eine funktion basteln die ein string erwartet und dann diese einzelnd zählt

Code:
void count(string str)
{
 
 cout << "Anzahl: " << ...	// Hier soll die anzahl der strings ausgegeben werden.
	
}

die funktion count bekommt viele strings wie z.B.:

haus
auto
tier

In diesem fall müsste die Anzahl = 3 sein. Wie kann ich machen bitte um Hilfe
 
Hallo Partitionist,

um mehrere Strings zu übergeben, kannst du doch nur mit Vektoren arbeiten. Sind sie dynamisch, bastelst du am besten eine Zähler-Methode ein, sind sie es nicht, ist die Länge sowieso bekannt und du kannst sie beispielsweise über eine optionale Angabe übergeben.
 
Kurze Frage an die erfahrenen Programmierer dieser Sprache:

Müsste man das Problem nicht kurz und elegant mit Pointern lösen lassen?
Ich kann pauschal keine Lösung abgeben, da ich da noch am lernen bin :)
 
Also ich hab mich nochmal rangesetzt, blöd ist nur, dass ich das in C geschrieben habe.
Ich hoffe mal, dass man das gut umschreiben kann oder so verwenden kann.
Ich gehe jetzt auch mal aus, dass dein übergebener String kein Array ist und in einem String mehrere Wörter stehen (aners konnt ich es nicht verstehen :))

Code:
#include <stdio.h>
#include <stdlib.h>

int Anzahlstrings(char *String){
    
    int anzahl=1;
    char Zeichen='z';
    
    while(*String != Zeichen){
        if (*String++ == '\0')
         return NULL;
        else if (*String == ' ') anzahl++; 
    }
      
    return anzahl;

}


int main(int argc, char *argv[])
{
  
  char satz[22] = "Hallo ich bin zuhause";
  int ergebnis;
  
  ergebnis = Anzahlstrings(satz);
  
  printf("Anzahl der Wörter im String ist: %d \n",ergebnis);
  
  
  system("PAUSE");	
  return 0;
}
 
Hi.

@Razorhawk: Warum nimmst du eigentlich an, dass der String mindestens 1 Wort enthält? Und warum stoppst du wenn das Zeichen 'z' in dem String auftaucht? Außerdem zählst du nicht die Wörter sondern alle Leerzeichen in dem String (wird falsch wenn mehrere Leerzeichen zwischen 2 Wörtern sind) und Whitespace umfasst neben einem Leerzeichen auch noch Tabulatoren und Zeilenschaltungen.

@partitionist: Ich nehme an du hast einen String und möchtest die Anzahl der Wörter darin ermitteln. Ansonsten müßtest du mal dein Problem genauer beschreiben.

Code:
#include <iostream>
#include <sstream>

using namespace std;

int count_words (const string& str) {
  string tmp;
  istringstream in (str);
  int words = 0;

  while (in >> tmp) words++;

  return words;
}

int main ()
{
  string str = "haus auto tier";

  cout << count_words (str) << endl;
}
Gruß
 
@deepthroat: Jepp ich will der funktion ein String übermitteln, aber in dem String ist auch nur ein wort also ist str einmal haus, dann test .....


string str;
str + = getString(); //liefert strings z.b Auto, Haus, Test ....

count(str);//Die funktion soll jeden string zählen
 
@ deppthroat: Oh oh oh... hast recht, da hab ich doch glatt einen Fehlerhaften Quelltext gepostet! Ich hatte eigentlich einen anderen reinkopieren wollen.
Sorry für das sinlose geschreibsel da oben ;)
 
partitionist hat gesagt.:
@deepthroat: Jepp ich will der funktion ein String übermitteln, aber in dem String ist auch nur ein wort also ist str einmal haus, dann test .....


string str;
str + = getString(); //liefert strings z.b Auto, Haus, Test ....

count(str);//Die funktion soll jeden string zählen

Warum verwendest du nicht einfach eine Variable?
Code:
int count = 0;

while (...) {
  string str;
  str += getString (); // wozu der += Operator?

  count ++;
}

Du könntest es auch mit einer statischen Variablen innerhalb der Funktion machen:
Code:
int count (const string& str) {
  static int c = 0;
  return ++c;
}

Oder mit einem sogenannten Funktor:
Code:
class Counter {
  int count;
public:
  Counter () : count (0) {}
  Counter (int c) : count (c) {}

  int operator() (const string& str) {
    return ++count;
  }

  operator int () { return count; }

  void reset () { count = 0; }
};
...

Counter count;

while (...) {
  string str;
  str = getString ();
  count (str);
}

cout << "gezählte Strings: " << count << endl;

Aber wozu sollte die Funktion überhaupt ein Argument übergeben bekommen? Der String ist doch völlig unrelevant, oder?

Gruß
 
Zurück