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

Anonymous

unregistriert

1

07.05.2004, 00:08

Position eines Zeichens in einem String suchen

Hallo,

ich versuche mit folgendem Code zu ermitteln, an welcher Indexposition sich das Zeichen c im String pString befindet:

Quellcode

1
2
char* p = strchr(pString, c);
size_t position = p - pString;


p zeigt immer auf den richtigen Speicherbereich (die Suche mit strchr funktioniert also), und ich dachte ich könne dann durch Subtraktion der beiden Zeiger den Index des Zeichens ermitteln.

Das funktioniert jedoch so nicht, je weiter hinten sich c im String befindet, desto mehr ist das Ergebnis verfälscht - die ermittelte Indexposition ist in den meisten Fällen zu klein.

Kann mir jemand sagen, warum es so nicht funktioniert? Wie könnte man sonst die Indexposition eines Zeichens (und eines anderen Strings) in einem String ermitteln?


Vielen Dank für Eure Hilfe!

Anonymous

unregistriert

2

07.05.2004, 01:04

Re: Position eines Zeichens in einem String suchen

hmmm....
bist Du Dir sicher, dass die Zahl vom Typ size_t sein sollte ?

ansonsten würde ich dass über eine for-schleife regeln

Quellcode

1
2
3
4
5
6
7
8
int FindChar(char* ZeichenKette, char &c)
{
  for (size_t i = 0; i < strlen(ZeichenKette); i++)
  if (Zeichenkette[i] == int(c))
    return(i);
  // ansonsten 1 zurückgeben
  return(-1);
}


hab ich jetzt nicht getestet...die Stelle an der es hapern könnte ist "== int(c)", aber auf jeden Fall muss dort der WERT des Zeichens stehen.

Ich benutze eine ähnliche Routine um den letzten Backslash in einer Zeichenkette zu finden; und so aus einer "Datei mit Pfadangabe" nur den Dateinamen zu gewinnen und da hab ich halt statt "int(c)" eine 92 für den Wert des Zeichens "\"

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

07.05.2004, 11:29

strcspn ist das was du suchst.
size_t position= strcspn(pString, p);

Anonymous

unregistriert

4

07.05.2004, 12:59

Vielen Dank für die Antworten.

Allerdings frage ich mich, warum bei meiner 1. lösung da so merkwürdige Werte für die Position rauskommen...

Sehr merkwürdig.

Anonymous

unregistriert

5

07.05.2004, 13:34

Zitat


strcspn ist das was du suchst.
size_t position= strcspn(pString, p);


Es ist unglaublich, selbst strcspn liefert mir die falsche Position! Wie kann denn das nur sein... liegt es vielleicht daran, dass mein String Newline Chars '\n' enthält? Werden die irgendwie nicht mitgezählt? Es hat fast den anschein...

6

07.05.2004, 13:46

Zitat

bist Du Dir sicher, dass die Zahl vom Typ size_t sein sollte ?
size_t ist in der Regel 64Bit breit. Aber wichtig ist, es ist ein Ganzzahltyp ;) Damit geeignet um Speicheradressen zu speichern.

Zitat

The strcspn function returns the index of the first occurrence of a character in string that belongs to the set of characters in strCharSet. Terminating null characters are included in the search.

Das sollte deine Frage beantworten. Was haste denn in p stehen? Nur ein Zeichen, oder mehrere?

Ich kann dir nur Raten einfach die STL zu benutzen.

Quellcode

1
2
3
#include <string>

size_t pos = std::string(pString).find(p);
Die sucht dir dann die Zeichenkette und liefert dir die Position. Sie zählt auch die Steuerzeichen mit ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

7

07.05.2004, 14:13

Zitat


Die sucht dir dann die Zeichenkette und liefert dir die Position. Sie zählt auch die Steuerzeichen mit


In der Hilfe steht, dass find npos zurückliefert, falls der Substring nicht gefunden wurde. Aber was ist npos? Der Compiler kann damit irgendwie nichts anfangen :rolleyes:

8

07.05.2004, 15:24

npos ist eine Statische Variable von std::string und hat den Wert -1 ;)

Quellcode

1
static size_t std::string::npos = -1;
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige