Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strstr implementieren.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.01.2009, 23:51 Uhr
~dabudai
Gast


Hi,

ich versuche eine strstr() Funktion, in mein Programm einzubauen.
Diese Funktion, ist nicht die Standart von C, sondern diese wurde von jemanden selber geschrieben.
Allerdings habe ich damit ein kleines Problem.
Statt die Position des Suchstrings bekomme ich den Suchstring zurück.
Könnte vllt. einer mal ein Auge darauf werfen.


C++:
char * searchStringInString(char *string, char *substring)
     {
         register char *a, *b;
    
    
         b = substring;
         if (*b == 0) {
             return string;
         }
         for ( ; *string != 0; string += 1) {
             if (*string != *b) {
                 continue;
            }
             a = string;
             while (1) {
                 if (*b == 0) {
                     return string;
                 }
                 if (*a++ != *b++) {
                     break;
                 }
             }
             b = substring;
         }
         return (char *) 0;
}


int    main (void)
{
    char*   Adresse;
    char* Text="011112";
    char* Suchstring="112";


    Adresse = searchStringInString(Text, Suchstring);
    cout << Adresse;
    getch();
    return 0;    
}  
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.01.2009, 02:25 Uhr
0xdeadbeef
Gott
(Operator)


Zunächst mal, in C++ (ich gehe davon aus, dass du hier C++-Code schreiben willst, sonst kannst du std::cout nämlich nicht benutzen) ist es sinnvoller, anstelle der alten C-Strings std::string zu benutzen.

In diesem speziellen Fall läufst du in das Problem der const-correctness - du kannst einen char const* nämlich nicht einfach einem char* zuweisen. Sowas wie

C++:
    char* Text="011112";
    char* Suchstring="112";


sollte jeder respektable Compiler bemängeln.

Für deine Funktion bedeutet das: Wenn du die die Parameter zu char const * machst, kannst du keinen char* zurückgeben, und wenn du char* nimmst, kannst du keine konstanten Zeichenketten übergeben. Im Endeffekt müsstest du deswegen zwei Frontends für deine Funktion schreiben.

C ist an dieser Stelle nachlässiger, aber ganz ehrlich, es ist auch da ein ziemlich dreckiger Hack. Andere Zeiten, andere Sitten, nehme ich an.

Ansonsten, wenn ich diese Fehler aus deinem Programm entferne, liefert es mir das richtige Ergebnis. Die Rückgabe wird bei der Ausgabe halt wieder als String interpretiert. Gib ihm als Text mal "011112345" oder so, dann wird es vielleicht klarer.

Oh, und am Rande: Es ist höflich, Testcases so zu posten, dass sie direkt rauskopiert und kompiliert werden können. Das bedeuet zum einen, die Header-Includes am Anfang nicht rauszuschneiden, und zu anderen, wenn es sich vermeiden lässt, auf unnötige, plattformspezifische Codeteile (in diesem Fall getch()) zu verzichten.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.01.2009 um 02:26 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.01.2009, 09:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ansonsten:

strstr gibt IMMER den Reststring zurück (siehe 0xdeadbeefs "Ansonsten") - Was du suchst ist eine Art strpos, welches dir die relative Position zum Stringanfang zurückggibt (also z.b 15 oder was auch immer)

Wie gesagt, sollte aber, da du ja C++-Funktionen benutzt, sinnvollerweise gleich über std::string erledigt werden, das nimmt dir die ganzen Probleme normalerweise ab.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: