AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C++] String vergleichen

Ein Thema von Newbie44 · begonnen am 19. Sep 2007 · letzter Beitrag vom 21. Sep 2007
Antwort Antwort
Newbie44
(Gast)

n/a Beiträge
 
#1

[C++] String vergleichen

  Alt 19. Sep 2007, 16:14
Hallo,

ich bin auf einer Informatikschule und nun haben wir folgenden Auftrag bekommen. Wir sollen eine Funktion schreiben (int anzahl(char * suchbegriff, char * suche))

Diese Funktion soll einen String mit einem String durchsuchen. Also wie oft kommt das Suchwort in dem String vor.

Das Problem dabei ist bei mir die Syntax, wie baue ich so eine Funktion auf? Was passieren muss ist klar. Ich vergleiche den einen String mit den anderen String wie wenn ich eine Array vergleiche (suchbegriff[i] == suche [i])

Der Ablauft ist ja klar. In der ersten Schleife durchsucht er beide Arrays und prüft ob diese identisch sind. Das wird mit einer For schleife realisiert. doch wie mach ich das dann mit den weiteren Chars im Suchstring? Nehmen wir an, der String wurde am Anfang einmal gefunden. Wie überprüfe ich jetzt jedoch die anderen Chars die noch folgen?

Mein Problem ist nicht das denken, sondern schlicht einfach die Umsetzung.

Wie würdet Ihr das machen?

Ich stecke irgendwie fest.

Für baldige Antworten freue ich mich

Gruß

Sebastian

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

int anzahl(char * sb, char * str)
{
    for (int i = 0; i < strlen(str); i++)
    {
    }
};

int main(int argc, char *argv[])
{
  char * derstring = new char [20];
  strcpy("TestTestTestTest",derstring);
  cout<<anzahl("Test", derstring);
  system("PAUSE");
  return 0;
}
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#2

Re: [C++] String vergleichen

  Alt 19. Sep 2007, 16:32
Da du ja mit C Strings arbeitest, kannst du dich hier ja mal umschauen :
http://cppreference.com/stdstring/index.html

In C++ würde ich aber eher so arbeiten.

Code:
#include <string>

int anzahl(const char * sb, const char * str)
{
   std::string text(str);
   std::string::size_type stelle = text.find(sb);
   int result = 0;
   while(stelle != std::string::npos)
   {
      result++;
      stelle = text.find(sb, stelle+1);
   }
   return result;
}
Edit:
Was man alles für Fehler macht, wenn der Compiler nicht prüft
Stefan
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#3

Re: [C++] String vergleichen

  Alt 19. Sep 2007, 17:20
LOL du wirst echt lachen, diese lösung ist sogar noch praktischer als die alten C strings. Warum bin ich da nicht selber draufgekommen.

Du hast ja vollkommen recht. Warum denkt man nur immer so bescheuert
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#4

Re: [C++] String vergleichen

  Alt 19. Sep 2007, 17:35
Nö eigentlich nicht wirklich, hab mal selber in die Funktionliste geschaut:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int anzahl(char * sb, char * str)
{
   char * stelle = strstr(str, sb);
   int result = 0;
   while(stelle)
   {
      count++;
      stelle = strstr(stelle+1, sb);
   }
   return result;
};

int main(int argc, char *argv[])
{
   char * derstring = new char [20];
   strcpy(derstring, "TestTestTestTest");       //hier hattest du die Parameter vertauscht
   printf("%i\n", anzahl("Test", derstring));   //cout geht nur mit iostream.h bzw. std::cout                                      //mit iostream
   system("PAUSE");
   return 0;
}
Der Code macht das gleiche, ist nur ein bisschen weniger Tipparbeit!

Edit : Hab mal um die Analogie zu obigen Beispiel herzustellen die Variablen-Namen angepasst.
Stefan
  Mit Zitat antworten Zitat
Newbie44
(Gast)

n/a Beiträge
 
#5

Re: [C++] String vergleichen

  Alt 19. Sep 2007, 18:41
Hey das ist auch leicht nachzuvollziehen, nur mit dem Unterschied das ich noch nie mit strstr gearbeitet habe. könnte man das eigentlich auch noch selber schreiben das strstr? das wäre auch mal ganz interessant.
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#6

Re: [C++] String vergleichen

  Alt 19. Sep 2007, 21:58
Den Quellcode für strstr() wirst du wohl nur über einen freien Compiler bekommen. Wenn du viel Zeit hast kannst du dich ja durch den GNU wühlen, ich habe es schon versucht, bin aber gescheitert. Als Alternative kannst du auch einfach die find() Methode von der string-Klasse aus der STL mal nachverfolgen. Das geht mit Visual Studio sehr elegant, dazu sollte auch die kostenlose Express reichen. Einfach Rechtsklick auf die Methode in deinem Quelltext und auf Definition suchen. Als blutiger Anfänger wirst du allerdings nicht viel ablesen können, weil der Code nicht gerade auf Leserlichkeit getrimmt ist. Ich kann dir aber cppreference.com ans Herz legen. Dies ist eine sehr übersichtliche Seite, wo alle normal vorhandenen Funktionen und Klassen, sehr ausführlich und mit Beispielendokumentiert sind. Und das sag ich, trotz das sie nicht von mir ist.

Gruß Stefan!
Stefan
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#7

Re: [C++] String vergleichen

  Alt 21. Sep 2007, 13:14
Also strstr() könntest du etwa so implementieren:
Code:
char * strstr(char * text, const char * subtext)
{
   unsigned int i = 0, j = 0;
   bool found = false;
   while(text[i])
   {
      if(text[i] == subtext[0])
      {
         while(subtext[j])
         {
            found = true;
            if(subtext[j] != text[i+j])
            {
               found = false;
               break;
            }
            j++;
         }
         if(found)
            return text+i;
      }
      i++;
   }
   return NULL;
}
Wobei ich mir sicher bin, dass ich in meiner grenzenlosen Inkompetenz nicht den besten Weg gewählt habe.

Die Funktion kann man nun mit ein wenig Korrektur einfach in dein Ausgangsproblem überführen.
Code:
int anzahl(const char * subtext, const char * text)
{
   unsigned int i = 0, j = 0, zaehler = 0;
   bool found = false;
   while(text[i])
   {
      if(text[i] == subtext[0])
      {
         while(subtext[j])
         {
            found = true;
            if(subtext[j] != text[i+j])
            {
               found = false;
               break;
            }
            j++;
         }
         if(found)
            zaehler++;
      }
      i++;
   }
   return zaehler;
}
Wobei hier analog zu oben gilt, es gibt unter Umständen bessere Lösungen.

Gruß!
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz