Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

08.06.2014, 22:59

C++: Strings voneinander subtrahieren

Hallo! Ich habe zwei std::string Zeichenketten in meiner Anwendung, die in etwas so aufgebaut sind:

Quellcode

1
2
string1 = "Käse\Brot\Salami\Butter";
string2 = "Käse\Brot\";

Ich möchte diese Zeichenketten jetzt in etwa "voneinander subtrahieren", sodass nur noch die Zeichen zurückgeliefert werden, die nicht übereinstimmen:

Quellcode

1
Salami\Butter

Dabei ist garantiert, dass die Anfänge der Zeichenketten identisch sind.

Gibt es dafür eine Funktion oder hat jemand einen Tipp für mich? Ich stehe gerade leider ein wenig auf der Leitung :P

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

2

08.06.2014, 23:02

Hi,

Wenn du einen Delimiter "\" hast, der universell ist, kannst du einfach immer nach diesem Suchen und die Zeichen bis dahin auslesen und in einem neuen String speichern!
http://www.cplusplus.com/reference/string/string/substr/
http://www.cplusplus.com/reference/algorithm/find/
WIP Website: kevinheese.de

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

08.06.2014, 23:03

Du vergleichst in einem Zweizeiler alle Zeichen der jeweiligen Strings, bis sie nicht mehr passen und returnst den Rest, der nicht mehr passt?

Geht es hier eventuell um Datei-Pfade? Denn dafür gibt es oft tatsächlich schon Methoden in den jeweiligen APIs/Frameworks, die aus absoluten Pfade relative Pfade machen können.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

4

08.06.2014, 23:54

... zum Bleistift boost::filesystem, oder das leider noch nicht erschienene std::experimental::filesystem. Ansonsten halt der vorgeschlagene Bruteforce-Algorithmus.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

5

09.06.2014, 00:12

Alternativ: Der STL-Container "set" bzw. "multiset", auf dem Mengenoperationen ausgeführt werden können (char-Container "multiset" dann).
Das was du suchst wäre die Differenzmenge.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

09.06.2014, 00:25

std::set? boost::filesystem?
Also ich weiß nicht was ihr für komische Ideen habt, aber ausgehend von der Ausgangsfrage doch einfach wenn es Std-Strings sind:
std::string string3(string1.cbegin() + string2.length(), string1.cend());

Oder verstehe ich da etwas falsch?
EDIT:
Oder wahlweise "string1.substr(string2.length());"

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

09.06.2014, 00:29

Suchst du tatsächlich die Differenzmenge oder willst du eigentlich eher einen gemeinsamen Präfix abschneiden? Für letzteres könnte std::mismatch() helfen...

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

8

09.06.2014, 11:44

Du vergleichst in einem Zweizeiler alle Zeichen der jeweiligen Strings, bis sie nicht mehr passen und returnst den Rest, der nicht mehr passt?

So schlimm es ist darauf bin ich gestern nicht gekommen 8|

Einen gemeinsamen Präfix abzuscheiden, trifft es wohl eher. Ich brauche keine Differenzmenge. Ich bin nun mit der Lösung von Spiele_Programmierer verblieben.

Danke an die Vorschläge!

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

09.06.2014, 11:55

Der Ansatz von Spiele_Programmierer geht aber nur, wenn einer der Strings ein echtes Präfix des anderen ist. Und dann ist der Fall wirklich trivial.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

10

09.06.2014, 12:28

Hitze macht eine Matschebrine ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige