Überprüfen ob String mit angegebenden Zeichen anfängt

FBIagent

Erfahrenes Mitglied
moin,

wie im Betreff schon gesagt möchte ich überprüfen ob ein String mit einem anderen
angegebenden String anfängt. Ich weis aber nicht wie ich das realisieren sollte.
Hab auch leider nichts dazu zu gefunden.

Code:
#ifndef MY_STRINGS_H
#define MY_STRINGS_H

#include <iostream>
using namespace std;

bool starts_with(string full,string start_exepts)
{
  return true;
}

#endif

Wie würde ich es den hinbekommen, das, wenn full mit start_exepts anfängt true
zurück gegeben wird und andernfalls false?

THX im Vorraus
MFG FBIagent
 
Zuletzt bearbeitet:
Moin moin,

kürz doch einfach den zu prüfenden String auf die Länge des Vergleichsstrings...
und dan nutz strcmp(...).

Bei MFC-Verwendung würd ich CString::Find(...) nutzen... wird der String am Anfang gefunden, fängt der zu testende String auch mit dem Vergleichsstring an:-)

Gruss Michael
 
Hi.

Ein std::string besitzt die Methode substr(size_type start, size_type count = npos) mit der man von einem String einen Substring herstellen kann.

Wo du das jetzt weißt, brauchst du nur noch (wenn full mind. so lang ist wie start_exepts) einen Substring von full erstellen der so lang ist wie start_exepts und diesen Substring mit start_exepts zu vergleichen.

Übrigens ist es eine schlechte Idee und schlechter Stil (nicht-inline) Funktionen in Header Dateien zu definieren.

/edit: Außerdem ist es ebenfalls genauso ungünstig eine "using namespace" Deklaration in einem Header zu machen. Ist eine ganz schlechte Idee.

Gruß
 
Zuletzt bearbeitet:
Du kannst ganz einfach das aufrufen:

Code:
bool starts_with(string full,string start_exepts)
{
  return ( full.find( start_exepts ) == 0 );
}

Zusätzlich zu den oben genannten Optionen würde ich auch auf const-Referenzen zugreifen:

Code:
bool starts_with( const std::string& full, const std::string& start_exepts )
{
  return ( full.find( start_exepts ) == 0 );
}
 
deepthroat hat gesagt.:
Übrigens ist es eine schlechte Idee und schlechter Stil (nicht-inline) Funktionen in Header Dateien zu definieren.

/edit: Außerdem ist es ebenfalls genauso ungünstig eine "using namespace" Deklaration in einem Header zu machen. Ist eine ganz schlechte Idee.

Ja hab das gerade gefunden mit substr() und length().

Jetzt würde ich gerne noch zu deinen beiden Behauptungen da oben 2 Begründungen
haben.

Warum soll es schlechter Stil sein funktionen in Hader Dateien zu packen?
Also im main.cpp will ich ned gerade alles stehen haben.

Und warum soll es schlecht sein 'using namespace' in einem Header zu benutzen?

Naja werd jetzt erstma zur Schule gehen werd nachher nochma reinschaun.

THX im Vorraus
MFG FBIagent
 
FBIagent hat gesagt.:
Warum soll es schlechter Stil sein funktionen in Hader Dateien zu packen?
Weil Header Dateien (potentiell) von allen möglichen anderen Dateien eingebunden werden. Wenn in den Header Dateien Variablen- bzw. Funktionsdefinitionen stehen würden bekommt jede Übersetzungeinheit eine eigene Version der Variablen bzw. Funktionen verpaßt und das führt dann beim Linken zu einem Fehler wie "multiple definition of blablabla".
FBIagent hat gesagt.:
Also im main.cpp will ich ned gerade alles stehen haben.
Dann solltest du sie in eine andere .cpp Datei reinschreiben.

FBIagent hat gesagt.:
Und warum soll es schlecht sein 'using namespace' in einem Header zu benutzen?
Im Prinzip aus einem ähnlichen Grund wie zuvor. Die Header Datei wird irgendwo eingebunden und wenn man dann mit der Holzhammermethode vorgeht und gleich erstmal den ganzen std Namensraum im globalen Namensraum verfügbar macht hat das Auswirkungen auf die zu übersetzende Einheit. Wenn ich z.B. eine eigene Klasse cout schreibe und will deinen Header benutzen hab ich einen Namenskonflikt weil das Genie was den Header geschrieben hat (;-)) alle Elemente von std in den glob. Namensraum schon eingefügt hat.

Gruß
 
Moin,

also am besten nur "classes" und "structs" in Header Dateien deklarieren und
implementieren? Oder in Hader Dateien nur "classes" deklarieren und in einer .cpp
implementieren?

Und dann kommt bei mir noch eine frage: Wie binde ich die extra .cpp Datei denn dann
ein?

Oder wäre es vorteilhaft dann für jeden Funktionsbereich eine DLL zu erstellen?

THX im Vorraus
MFG FBIagent
 
Zurück