mikrocontroller.net

Forum: PC-Programmierung c++ bestimmten Buchstaben in string großschreiben


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Paulchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Paulchen schrieb:
> ich hab es bereits meintext.replace und toupper versucht, komm aber
> nicht wirklich weiter...

Zeige mal deinen Quelltext, der nicht funktioniert.

Autor: NichtWichtig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meintext[8] &= ~0x20;

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NichtWichtig schrieb:
> meintext[8] &= ~0x20;

Wenn schon, dann
meintext[7] ^= 0x20; // toggle

leo

Autor: Paulchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leo schrieb:
> NichtWichtig schrieb:
>> meintext[8] &= ~0x20;
>
> Wenn schon, dannmeintext[7] ^= 0x20; // toggle
>
> leo


funktioniert auf anhieb.
bestesten dank! :)

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paulchen schrieb:
> funktioniert auf anhieb

Vorsicht , wenn Zeichen wie "äöüß" im Spiel sind.

Autor: mh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GEKU schrieb:
> Vorsicht , wenn Zeichen wie "äöüß" im Spiel sind.

Vorsicht auch bei allen anderen Zeichen.

Autor: nfet (Gast)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
Was auch hilft, ist beim Anlegen des Strings an der passenden Stelle 
kurz die Shift Taste zu drücken.

Autor: Dirk B. (dirkb2)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
meintext[7] = toupper(meintext[7]);

ist portabler.

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mh (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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.

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
imonbln schrieb:
> daher würde ich mindesten |= 0x20 nehmen

... und das macht Kleinbuchstaben.

leo

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
imonbln schrieb:
> oder halt |= ~0x20

Ja, fast: &= ~0x20 ist besser.

Ich bin BTW nicht fuer die Bitfummelei in der Praxis.
  if (isalpha(c)) {
    c = isupper(c) ? tolower(c) : toupper(c);
  } 

ist portabel und lesbar.

leo

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leo schrieb:
> Ja, fast: &= ~0x20 ist besser.

Seufz scheint heute nicht mein Tag zu sein, du hast natürlich recht.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
c = toupper(c);

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wandelt toupper in Kleinbuchstaben um?


Rolf M. schrieb:
>>     c = isupper(c) ? tolower(c) : toupper(c);

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Sebastian (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
leo schrieb:
> Allerdings habe ich vor ca. 40 Jahren das letzte mal ein
> Nicht-ASCII-System programmiert

Unicode hast du noch nie gebraucht?

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leo schrieb:
> Und die ersten 128 Bytes von Unicode sind?

…nur ein Teil von Unicode.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
früher mussten wir Hausaufgaben noch selber machen

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: leo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Udo S. (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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. :-)

Autor: Jedzia D. (Firma: Rast und Ruh) (jedzia)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Eric B. (beric)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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]

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.