Wie funktioniert der Vergleich bei String-Array mit einzelnen Zeichen



  • Erstmal solltest du statt "int pos" lieber "size_t pos" verwenden und mit string::npos vergleichen.

    Zweitens: In welcher Zeile tritte denn der Fehler auf?

    Drittens: Du öffnest die Datei als "source" und liest dann aus "source2" - das sollte bereit ein Fehler gemeldet werden.



  • Bei getline in der while-Schleife heißt es natürlich auch source, nicht source2.

    Die Warnings treten bei allen if bzw. else if-Anweisungen in der while-Schleife auf.



  • Was ist denn size_t pos anders/besser als an int pos?
    Und was hat es mit dem string::npos auf sich?



  • HariboLight schrieb:

    Was ist denn size_t pos anders/besser als an int pos?

    "size_t" ist der Datentyp, den die Suchmethoden des Strings zurückgeben. (ist normalerweise ein ausreichend großer unsigned Typ)

    Und was hat es mit dem string::npos auf sich?

    string::find() und Kollegen liefern genau diesen Wert zurück, wenn sie nichts gefunden haben.



  • Blöde Vermutung: Dein Editor ist im UNICODE-Modus und Umlaute werden deshalb als zwei Bytes gespeichert. 'xx' ist aber ungültig da zwischen '' nur ein Byte stehen darf. Multibyte-Characterkonstanten werden mit L'' ausgedrückt, das würde aber vermutlich nicht tun was Du willst, da die Konsole nicht mit UNICODE arbeiten dürfte.



  • Blöde Vermutung: Dein Editor ist im UNICODE-Modus und Umlaute werden deshalb als zwei Bytes gespeichert. 'xx' ist aber ungültig da zwischen '' nur ein Byte stehen darf. Multibyte-Characterkonstanten werden mit L'' ausgedrückt, das würde aber vermutlich nicht tun was Du willst, da die Konsole nicht mit UNICODE arbeiten dürfte.

    Genau so ist es, mein Editor ist auf Unicode eingestellt, aber dennoch muss es doch eine Möglichkeit geben innerhalb eines Strings nach bestimmten Zeichen zu suchen und diese dann ersetzen zu können. Soweit ich weiss ist mein ganzes System auf Unicode eingestellt, dass sollte doch dann auch dazu führen, dass es in der Konsole funktioniert.

    Das ist doch dann alles Mist.
    Das hieße ja, dass mein Programm eventuell läuft, wenn das System mit Unicode arbeitet, aber nicht mehr vernünftig läuft, wenn das System mit ISO arbeitet?



  • Nein, das heißt nur, daß dein Editor 'ß' und dergleichen nicht als char-Werte anerkennt - zur Not könntest du ja deren ASCII-Werte manuell raussuchen und die Escape-Sequenzen '\x..' verwenden.



  • Als dann quasi per:

    if(command[pos] == '\xx..') command.replace(pos,1,"ss");



  • Ja, jetzt mußt du nur noch die richtigen Werte dort einsetzen (z.B. ß ist \xE1').

    (beachte auch, daß die DOS-Konsole einen anderen Zeichensatz verwendet als Windows-Programme)



  • Sind die Escape-Sequenzen plattformunabhängig?
    Ich nutze Suse Linux.

    Wo guckst du die Sequenzen nach?



  • HariboLight schrieb:

    Sind die Escape-Sequenzen plattformunabhängig?
    Ich nutze Suse Linux.

    Alles bis einschließlich \x7F dürfte überall gleich sein, darüber unterscheiden sich die verschiedenen Zeichensätze je nach System.

    Wo guckst du die Sequenzen nach?

    Windows Zeichentabelle.

    Um ganz sicher zu sein, daß du die richtigen Werte verwendest, kannst du dir ja eine ASCII-Tabelle ausgeben lassen:

    cout<<hex;
    for(int i=1;i<256;++i)
      cout<<"'\\x"<<i<<" = "<<(char)i<<"\n";
    


  • Danke, aber leider scheint das nicht zu funktionieren.
    Die Ausgabe beinhaltet nur die "normalen Zeichen" und sieht exakt wie folgt aus:

    '\x1 =
    '\x2 =
    '\x3 =
    '\x4 =
    '\x5 =
    '\x6 =
    '\x7 =
    '\x8 =
    '\x9 =
    '\xa =

    '\xb =

    '\xc =

    '\xd =
    '\xe =
    '\xf =
    '\x10 =
    '\x11 =
    '\x12 =
    '\x13 =
    '\x14 =
    '\x15 =
    '\x16 =
    '\x17 =
    '\x18 = ▒
    '\x19 =
    '\x1a = ▒
    '\x1b =
    \x1c =
    '\x1d =
    '\x1e =
    '\x1f =
    '\x20 =
    '\x21 = !
    '\x22 = "
    '\x23 = #
    '\x24 = $
    '\x25 = %
    '\x26 = &
    '\x27 = '
    '\x28 = (
    '\x29 = )
    '\x2a = *
    '\x2b = +
    '\x2c = ,
    '\x2d = -
    '\x2e = .
    '\x2f = /
    '\x30 = 0
    '\x31 = 1
    '\x32 = 2
    '\x33 = 3
    '\x34 = 4
    '\x35 = 5
    '\x36 = 6
    '\x37 = 7
    '\x38 = 8
    '\x39 = 9
    '\x3a = :
    '\x3b = ;
    '\x3c = <
    '\x3d = =
    '\x3e = >
    '\x3f = ?
    '\x40 = @
    '\x41 = A
    '\x42 = B
    '\x43 = C
    '\x44 = D
    '\x45 = E
    '\x46 = F
    '\x47 = G
    '\x48 = H
    '\x49 = I
    '\x4a = J
    '\x4b = K
    '\x4c = L
    '\x4d = M
    '\x4e = N
    '\x4f = O
    '\x50 = P
    '\x51 = Q
    '\x52 = R
    '\x53 = S
    '\x54 = T
    '\x55 = U
    '\x56 = V
    '\x57 = W
    '\x58 = X
    '\x59 = Y
    '\x5a = Z
    '\x5b = [
    '\x5c = \
    '\x5d = ]
    '\x5e = ^
    '\x5f = _
    '\x60 = `
    '\x61 = a
    '\x62 = b
    '\x63 = c
    '\x64 = d
    '\x65 = e
    '\x66 = f
    '\x67 = g
    '\x68 = h
    '\x69 = i
    '\x6a = j
    '\x6b = k
    '\x6c = l
    '\x6d = m
    '\x6e = n
    '\x6f = o
    '\x70 = p
    '\x71 = q
    '\x72 = r
    '\x73 = s
    '\x74 = t
    '\x75 = u
    '\x76 = v
    '\x77 = w
    '\x78 = x
    '\x79 = y
    '\x7a = z
    '\x7b = {
    '\x7c = |
    '\x7d = }
    '\x7e = ~
    '\x7f =
    '\x80 =
    '\x81 =
    '\x82 =
    '\x83 =
    '\x84 =
    '\x85 =
    '\x86 =
    '\x87 =
    '\x88 =
    '\x89 =
    '\x8a =
    '\x8b =
    '\x8c =
    '\x8d =
    '\x8e =
    '\x8f =
    '\x90 =
    '\x91 =
    '\x92 =
    '\x93 =
    '\x94 =
    '\x95 =
    '\x96 =
    '\x97 =
    '\x98 =
    '\x99 =
    '\x9a =
    '\x9b =
    '\x9c =
    '\x9d =
    '\x9e =
    '\x9f =
    '\xa0 =
    '\xa1 =
    '\xa2 =
    '\xa3 =
    '\xa4 =
    '\xa5 =
    '\xa6 =
    '\xa7 =
    '\xa8 =
    '\xa9 =
    '\xaa =
    '\xab =
    '\xac =
    '\xad =
    '\xae =
    '\xaf =
    '\xb0 =
    '\xb1 =
    '\xb2 =
    '\xb3 =
    '\xb4 =
    '\xb5 =
    '\xb6 =
    '\xb7 =
    '\xb8 =
    '\xb9 =
    '\xba =
    '\xbb =
    '\xbc =
    '\xbd =
    '\xbe =
    '\xbf =
    '\xc0 =
    '\xc1 =
    '\xc2 =
    '\xc3 =
    '\xc4 =
    '\xc5 =
    '\xc6 =
    '\xc7 =
    '\xc8 =
    '\xc9 =
    '\xca =
    '\xcb =
    '\xcc =
    '\xcd =
    '\xce =
    '\xcf =
    '\xd0 =
    '\xd1 =
    '\xd2 =
    '\xd3 =
    '\xd4 =
    '\xd5 =
    '\xd6 =
    '\xd7 =
    '\xd8 =
    '\xd9 =
    '\xda =
    '\xdb =
    '\xdc =
    '\xdd =
    '\xde =
    '\xdf =
    '\xe0 =
    '\xe1 =
    '\xe2 =
    '\xe3 =
    '\xe4 =
    '\xe5 =
    '\xe6 =
    '\xe7 =
    '\xe8 =
    '\xe9 =
    '\xea =
    '\xeb =
    '\xec =
    '\xed =
    '\xee =
    '\xef =
    '\xf0 =
    '\xf1 =
    '\xf2 =
    '\xf3 =
    '\xf4 =
    '\xf5 =
    '\xf6 =
    '\xf7 =
    '\xf8 =
    '\xf9 =
    '\xfa =
    '\xfb =
    '\xfc =
    '\xfd =
    '\xfe =
    '\xff =


Anmelden zum Antworten