Post aus Forum.

Hab ich verwendet weil es schön Farbig abgesetzt ist:)

 

 

#include <algorithm>    // Hier sind allerlei feine sachen drinn
#include <iostream>     // cin cout etc.
#include <string>       // kennst ja oder ?   :)
using namespace std;    // Bin Schreibfaul was std:: betrifft -also via namespace std;

template <class T>      // Ein Header für eine
long  kb_count(T temp,T temp2); // template Klasse

int main(int argc, char* argv[]) // Wer das nich kennt, is hier falsch   :)
{                                // Wie ? WinMain ? Da schaust aber dumm ausm Fenster *g*
string temp;                     // Sorry hab wenig schlaf...   :)
string temp2;

cout<<"Bitte gib irgendwas ein"<<endl;  // Eingabeaufforderung
getline(cin,temp);                      // Zeile vom Benutzer lesen

cout<<"Was soll gesucht werden"<<endl;  // Und noch ma
getline(cin,temp2);                     // das gleiche wie oben

/*****************************************************************/
// Einzelnes Zeichen
long a;                                 // Zaehler
    //
    a = count(temp.begin(),temp.end(),temp2[0]);        // Zählen lassen
    // ausgeben
    cout<<temp2[0]<<" (das erste Zeichen von dem was Du eingegeben hast)  kommt "<<a<<" mal vor"<<endl;
/*****************************************************************************/
string::iterator p;                         // Izerator des Types string
// Suche nach einem Element, hier string
// Ginge auch in ner Liste z.B.   :)
a=0;                                        // Zählvariable auffrischen   :) (Ich hab mich so auch mal Initialisiert: Knuddlbaer=NULL  - seit dem klappt nix mehr   :)
    p = search(temp.begin(),temp.end(),temp2.begin(),temp2.end()); // Das erste Element suchen (wenn nichts gefunden wurde, bekommen wir temp.end() zurück)
    while(p != temp.end())                                         // Solange wir nicht am ende sind
    {
        p++;                                // Iterator um eine Einheit erhöhen
        p = search(p,temp.end(),temp2.begin(),temp2.end()); // und ab da weitersuchen
        a++;                                                // Unseren Zähler eins erhöhen, weil habbe ja was gefunne 8-)
    } ;

    cout<<temp2<<" (der String den Du eingegeben hast)  kommt "<<a<<" mal vor"<<endl;

    cout<<"Jaja, es kommt wirklich "<<kb_count(temp,temp2)<<" mal vor   :)"<<endl;
    return 0;

}
//---------------------------------------------------------------------------

// Das ganze als Funktion:

template <class T>
long  kb_count(T temp,T temp2)
{
// Ich bin zu müde - aber die Funktion lässt sich eigentlich mit allerlei verwenden.
// schaut mal ins Handburch zur STL   :)
// Ahso, der Parameter muss komatibel zum Iter sein.

T::iterator p;                         // Iterator des Types T
long a;                                // Zaehler (Buchhalter *g*)

a=0;                                   // Wieso fragst Du ob ich Buchhalter leiden kann. Wegen der 0 ?   :) Ich halt mein Buch auch immer fest wenn ich lese *g*
    p = search(temp.begin(),temp.end(),temp2.begin(),temp2.end()); // Das erste Element suchen (wenn nichts gefunden wurde, bekommen wir temp.end() zurück)
    while(p != temp.end())             // Solange wir nicht am ende sind
    {
        p++;                           // Iterator um eine Einheit erhöhen
        p = search(p,temp.end(),temp2.begin(),temp2.end()); // und ab da weitersuchen
        a++;                           // Unseren Zähler eins erhöhen, weil habbe ja was gefunne 8-)
    } ;
    return a;

}