c++ in einem char array suchen

chrisi01

Romy lieb haben
ID: 101113
L
26 November 2008
2.854
238
hi

ja als phpler hat man es mit c++ nicht leicht ;)

also ich hab ein char array buffer mit einer länge von 1024 bytes das danach gefüllt wird klappt auch wunderbar. Nun will ich darin eine Zeichenkette suchen es kommt z.b. um es einfach zu machen ein w vor und ich will das Zeichen danach ausgeben

PHP:
    int const BUFFER_SIZE = 1024;
    char buffer[BUFFER_SIZE];
    int zahler = 0;

..........

      while (zahler <= BUFFER_SIZE)
      {
      if (buffer[zahler] == "w")
      {
      printf(buffer[zahler + 1]);
      }
      }
      zahler = zahler + 1;


nun funktioniert das ganze aber nicht ganz es komm beim compilieren immer:

Error E2034 ../test.c 60: Cannot convert 'char' to 'char *' in function main()
Error E2034 ../test.c 62: Cannot convert 'int' to 'const char *' in function mai
n()
Error E2342 ../test.c 62: Type mismatch in parameter '__format' (wanted 'const char *', got 'char') in function main()

60 wäre die if anweißung 62 demnach das printf

wer kann mir da mal auf die Sprünge helfen bitte. oder gibt es gar eine fertige funktion dafür die man verwenden könnte um etwas in einem array zu suchen?

mfg

Chris
 
Du vergleichst das Zeichen aus dem Buffer mit der Adresse des Strings "w".
Ändere die Anführungszeichen von "w" auf 'w'.

Außerdem hast du ein Problem mit der Schleifenabbruchbedingung.
Da der Index des Buffers mit 0 beginnt, läuft die Schleife bis zum ersten Zeichen hinter dem für den buffer reservierten Speicherbereich.

Wenn du also alle Zeichen durchlaufen willst, müßtest du folgendes machen:
while (zahler < BUFFER_SIZE)

Du willst aber zusätzlich noch das Zeichen nach dem geprüften Zeichen ausgeben. Daher darfst du nur bis zum vorletzten Zeichen suchen.
Also :
while (zahler < BUFFER_SIZE-1)

Natürlich gibt es auch fertige Lösungen. Beispielsweise findest du in string.h Funktionen zur Behandlung von Strings.
 
hi

danke dir vielmals also ich habe zwar jetzt noch die funktion strchr() gefunden will das aber trotzdem erstmal so wie oben hinbekommen ;)

PHP:
while (zahler < BUFFER_SIZE - 1)
      {
      if (buffer[zahler] == 'w')
      {
      printf(buffer[zahler + 1]);
      }
      zahler = zahler + 1;  
      }

der erwartet aber bei der Ausgabe eine const char im array zähler. so wie ich das sehe:

Error E2034 ../test.c 62: Cannot convert 'int' to 'const char *' in function main()
Error E2342 ../test.c 62: Type mismatch in parameter '__format' (wanted 'const char *', got 'char') in function main()

62 ist die Ausgabezeile (printf)

wie löse ich das ich muss mit der Variable ja arbeiten und kann keine constante verwenden und char ist auch dumm brauch ja ein int zum rechnen?!

edit: problem behoben dadurch das ich cout als ausgabe verwende jetzt würde mich nur interessieren warum?!

mfg

Chris
 
Zuletzt bearbeitet:
Ich habe leider keinen Compiler zur Hand und arbeite schon länger nicht mehr mit C++. Daher kann ich dir nur einen Hinweis geben, wo du ansetzen kannst.

Du kannst bei printf angeben, welchen Typ die Variable, die du ausgeben willst, hat. Ändere deine Ausgabe auf folgendes:

printf("%c", buffer[zahler + 1]);
 
hi

danke euch beiden aber ich nehme jetzt einfach cout :p damit geht es auch siehe edit oben ;) werde mir aber trotzdem die printf funktion nochmal angucken ;)

mfg

Chris
 
hi

so noch eine Frage:

PHP:
	  int erg;
.........
      while (zahler < BUFFER_SIZE - 6)
      {
      if (buffer[zahler] == 'w' && buffer[zahler + 1] == 'e' && buffer[zahler + 2] == 'r' && buffer[zahler + 3] == 't' && buffer[zahler + 4] == '1' && buffer[zahler + 5] == '=')
      {
      erg = buffer[zahler + 6];
      }
      zahler = zahler + 1;  
      }
      cout << erg;

gibt jetzt auf einmal 48 oder 49 aus anstatt 0 oder 1 (was durch cout << buffer[zahler + 6]; ausgegeben wird und auch richtig wäre). Wie kommt der auf die Idee 48 einfach drauf zurechnen? Denn in dem Char array kommt entweder wert1=0 oder wert1=1 vor. Wie gesagt wenn ich es nicht in eine Variable zwischenspeicher sondern direkt mit cout << buffer[zahler + 6]; ausgebe stimmt es auch er gibt mir 0 oder 1 aus. verstehe das gerade nicht ganz

edit: ich sollte öfters eine rauchen gehen da kommen eine die ideen ;) die 0 ist das 48. ascii Zeichen ;)

mfg

chris
 
Zuletzt bearbeitet: