Hallo
ich möchte in visual studio ein kleines c++ tool, das einen
kleingeschriebenen Text liest (originalText) und dann alle Möglichkeiten
ausgibt, mit jeweils einen großgeschriebenen Buchstaben. Das klappt so
ganz gut:
1
for(intn=0;n<Text_lenght;n++){
2
modifiedText1=originalText;
3
modifiedText1[n]^=0x20;
4
cout<<modifiedText1<<endl;
5
}
Analog dazu gibt der folgende Code maximal 2 großgeschriebene Buchstaben
aus:
1
for(intn=0;n<Text_lenght;n++){
2
modifiedText1=originalText;
3
modifiedText1[n]^=0x20;
4
cout<<modifiedText1<<endl;
5
for(intm=n+1;m<Text_lenght;m++){
6
modifiedText2=modifiedText1;
7
modifiedText2[m]^=0x20;
8
cout<<modifiedText2<<endl;
9
}
10
}
Natürlich kann man entsprechende Verschachtelungen auch für max.3, max.4
usw anwenden.
Wie geh ich aber vor, wenn ich nun maximal n großgeschriebene Buchstaben
möchte? Zum Beispiel dass n jeweils die Länge des Textes ist?
ich hab mich nun bzgl. Rekursion etwas eingelesen. Bei meiner
Aufgabenstellung komme ich aber trotzdem nicht weiter, oder ich steh
einfach auf dem Schlauch...
Hmm... mit meinem Beispiel bin ich evtl etwas über's Ziel
hinausgeschossen und mag einen Anfänger überfordern, deshalb hier ein
etwas zugänglichere Version der Funktion foo. Die Endrekursion, die
hier nicht Thema ist, wurde durch eine Schleife ersetzt und es werden
sprechende Namen benutzt:
1
void
2
grossklein(char*str,intab_pos,intwieviele)
3
{
4
if(wieviele>0)
5
for(inti=ab_pos;str[i];i++)
6
{
7
str[i]^=0x20;
8
printf("%s\n",str);
9
grossklein(str,i+1,wieviele-1);
10
str[i]^=0x20;
11
}
12
}
Die Rekursion ist klar zu erkennen und mit etwas Überlegung wird
deutlich, dass durch sie bis zu wieviele Schleifen gleichzeitig
aktiv sind.
Übung: Die Funktion so abändern, dass nur Strings, die exakt wieviele
Zeichen geändert haben, ausgegeben werden.
nur zur Info:
das was Du schreibst ist C-Code.
In C++ arbeitet man mit den STL wie dann z.B. Vector oder wenn Du in
einem Framework z.B. Boost oder QT unterwegs bist mit deren Pendats.
Paulchen schrieb:> modifiedText1[n] ^= 0x20;
Ich weiß ja nicht, wozu das gut sein soll, aber das wandelt auch
Großbuchstaben und andere Zeichen um. Willst Du das so?
Besser ist daher toupper(), das wandelt nur a..z um und läßt alle
anderen Zeichen in Ruhe.
Bzw. mit islower() kann man testen, ob ein Zeichen innerhalb a..z ist.
Erstmal sollte man das ganze in C++ schreiben wie eingangs gefordert,
dann wirds auch gleich viel simpler...
Als einfaches Beispiel großschreiben des ganzen Strings:
http://www.cpp.sh/6kj2d
Darauf aufbauend sollte es kein Problem sein, mit foobars Ansatz deine
ursprüngliche Aufgabe zu lösen, nur halt in C++ statt C.
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.