Hallo Wie kann ich einen einzelnen, bestimmten Buchstaben in einem vordefinierten string großschreiben? Oder besser noch invertieren? string meintext "gehdualteresel"; sollte nach der Veränderung an 8. Stelle so sein: "gehdualTeresel" ich hab es bereits meintext.replace und toupper versucht, komm aber nicht wirklich weiter...
Paulchen schrieb: > ich hab es bereits meintext.replace und toupper versucht, komm aber > nicht wirklich weiter... Zeige mal deinen Quelltext, der nicht funktioniert.
leo schrieb: > NichtWichtig schrieb: >> meintext[8] &= ~0x20; > > Wenn schon, dannmeintext[7] ^= 0x20; // toggle > > leo funktioniert auf anhieb. bestesten dank! :)
GEKU schrieb: > Vorsicht , wenn Zeichen wie "äöüß" im Spiel sind. Vorsicht auch bei allen anderen Zeichen.
Was auch hilft, ist beim Anlegen des Strings an der passenden Stelle kurz die Shift Taste zu drücken.
1 | meintext[7] = toupper(meintext[7]); |
ist portabler.
mh schrieb: > GEKU schrieb: >> Vorsicht , wenn Zeichen wie "äöüß" im Spiel sind. > > Vorsicht auch bei allen anderen Zeichen. Yep, sonst wird noch aus einem Fragezeichen ein großes oder gar ein verkehrtes¿ Im Ernst: ich sollte dazuschreiben: das gilt nur für ASCII-Buchstaben [a-zA-Z]. Man sollte schon wissen, was man einsetzt, die ASCII-Tabelle so ca. im Hinterkopf haben und auch den xor-Operator.
leo schrieb: > Yep, sonst wird noch aus einem Fragezeichen ein großes oder gar ein > verkehrtes¿ > > Im Ernst: ich sollte dazuschreiben: das gilt nur für ASCII-Buchstaben > [a-zA-Z]. Man sollte schon wissen, was man einsetzt, die ASCII-Tabelle > so ca. im Hinterkopf haben und auch den xor-Operator. Der c Standard legt nur fest, dass es die Buchstaben gibt. Nur für die Ziffern ist festgelegt, dass sie aufeinander folgen.
mh schrieb: >> die ASCII-Tabelle >> so ca. im Hinterkopf haben ... > > Der c Standard legt nur fest, dass es die Buchstaben gibt. Nur für die > Ziffern ist festgelegt, dass sie aufeinander folgen. Ja, das stimmt. Allerdings habe ich vor ca. 40 Jahren das letzte mal ein Nicht-ASCII-System programmiert. leo
leo schrieb: > mh schrieb: >>> die ASCII-Tabelle >>> so ca. im Hinterkopf haben ... >> >> Der c Standard legt nur fest, dass es die Buchstaben gibt. Nur für die >> Ziffern ist festgelegt, dass sie aufeinander folgen. > > Ja, das stimmt. Allerdings habe ich vor ca. 40 Jahren das letzte mal ein > Nicht-ASCII-System programmiert. > > leo Möglich, aber warum kann man es nicht gleich richtig machen? Ein toupper ist zudem deutlich einfacher zu lesen als ein ^|+-/=0x42 oder was auch immer vorgeschlagen wurde. Ich müsste erst nachlesen was das bedeutet, da ich die ASCII Werte nicht auswendig kenne, und keinen Grund sehe sie zu lernen.
mh schrieb: > Möglich, aber warum kann man es nicht gleich richtig machen? Ein toupper > ist zudem deutlich einfacher zu lesen als ein ^|+-/=0x42 oder was auch > immer vorgeschlagen wurde. Ich müsste erst nachlesen was das bedeutet, > da ich die ASCII Werte nicht auswendig kenne, und keinen Grund sehe sie > zu lernen. zumal das vorgeschlagene leo schrieb: > Wenn schon, dannmeintext[7] ^= 0x20; // toggle nicht Idempotent ist. Wenn da schon ein Großbuchstabe steht kommt genau das raus was der TO nicht will. daher würde ich mindesten |= 0x20 nehmen oder eben besser die toupper funktion. Idempotenz habe ich gelernt ist etwas das man als Informatiker immer versuchen sollte zu erreichen wenn möglich
imonbln schrieb: > Wenn da schon ein Großbuchstabe steht kommt genau > das raus was der TO nicht will. Wie wuerdest du das vom TO interpretieren: "Oder besser noch invertieren?" leo
leo schrieb: > imonbln schrieb: >> Wenn da schon ein Großbuchstabe steht kommt genau >> das raus was der TO nicht will. > > Wie wuerdest du das vom TO interpretieren: > > "Oder besser noch invertieren?" > Nicht immer weiss der TO was er wirklich will ;) Aber mal ernsthaft, deine Lösung erfüllt alle Anforderung welche der TO gestellt hat und ist daher durchaus Valide und gut. Ich habe jedoch auch schon oft genug erlebt wie es zu vermeidbaren Fehlern in Komplexen Systemen kamm welche darauf zurück Zuführen waren das etwas nicht Idempontent ist und einfach Toggelt. Daher wollte ich hier zumindest mal drauf hinweisen das ein statischer ausgang möglicherweise besser ist. leo schrieb: > ... und das macht Kleinbuchstaben. > > leo noch ein Grund die toupper Funktion zu verwenden oder halt |= ~0x20 zu schreiben. Um ehrlich zu seinen habe ich mir den ASCII Standard seit Jahren nicht mehr angesehen wozu auch ?
imonbln schrieb: > oder halt |= ~0x20 Ja, fast: &= ~0x20 ist besser. Ich bin BTW nicht fuer die Bitfummelei in der Praxis.
1 | if (isalpha(c)) { |
2 | c = isupper(c) ? tolower(c) : toupper(c); |
3 | }
|
ist portabel und lesbar. leo
leo schrieb: > Ja, fast: &= ~0x20 ist besser. Seufz scheint heute nicht mein Tag zu sein, du hast natürlich recht.
leo schrieb: > if (isalpha(c)) { > c = isupper(c) ? tolower(c) : toupper(c); > } > > ist portabel und lesbar. Und wozu so kompliziert? Die beiden Vergleiche macht toupper selbst. Man kann die drei Zeilen als ersetzen durch ein
1 | c = toupper(c); |
Wandelt toupper in Kleinbuchstaben um? Rolf M. schrieb: >> c = isupper(c) ? tolower(c) : toupper(c);
Ach so, es ging um das Toggeln. Das hatte ich übersehen. Dann braucht man die Zeile mit dem ?:-Operator, aber das if braucht man trotzdem nicht.
:
Bearbeitet durch User
leo schrieb: > Allerdings habe ich vor ca. 40 Jahren das letzte mal ein > Nicht-ASCII-System programmiert Unicode hast du noch nie gebraucht?
Sebastian schrieb: > leo schrieb: >> Allerdings habe ich vor ca. 40 Jahren das letzte mal ein >> Nicht-ASCII-System programmiert > > Unicode hast du noch nie gebraucht? Und die ersten 128 Bytes von Unicode sind? leo
früher mussten wir Hausaufgaben noch selber machen
Rolf M. schrieb: > leo schrieb: >> Und die ersten 128 Bytes von Unicode sind? > > …nur ein Teil von Unicode. Genau. Die ersten 128 Codepoints sind ASCII. Ob "darueber" latin1, iso_8859-15, oder unicode liegt, ist vollkommen egal. [A-Za-z] bleiben ident. leo
leo schrieb: > [A-Za-z] bleiben ident. Das bringt mir aber herzlich wenig, wenn ich ein ü in ein Ü umwandeln will. A-Z sind nicht die einzigen Buchstaben auf der Welt, die es in groß und klein gibt.
Rolf M. schrieb: > Das bringt mir aber herzlich wenig, wenn ich ein ü in ein Ü umwandeln > will. Ja und. Ich habe auf die Rahmenbedingungen hingewiesen. leo
Rolf M. schrieb: > nur ein Teil von Unicode. kleiner Teil wolltest du sagen. Aber wenn der Frosch halt sein ganzes Leben in seiner Bromelie bleiben will ... soll man ihn lassen. :-)
Ihr habt ja schon alles wichtige geklaert. Ich moechte GEKU's Kommentar trotzdem noch "ICU" hinzufügen. Ein Hello world kann nicht funktional ohne ICU sein! https://godbolt.org/z/wDD6sX .... :P
Jedzia D. schrieb: > Ein Hello world kann nicht funktional ohne ICU sein! > > https://godbolt.org/z/wDD6sX .... :P Da steht: <source>:3:10: error: 'boost/foreach.hpp' file not found [clang-diagnostic-error]
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.