Zum Forum springen
Benachrichtigungen
Alles löschen

[Geschlossen] C++ Aufgabe (Strings)

17 Beiträge
6 Benutzer
0 Reactions
1,770 Ansichten
makro1983
Beigetreten: 17.05.2008

Hey Leute!

Habe mal eine Aufgabe bekommen an der ich gerade etwas hänge!

Aufgabenstellung wie folgt:
Lesen Sie einen beliebigen String ein. Dieser ist so zu bearbeiten, das VOR und NACH dem String alle "blanks/Leerzeichen" gelöscht werden und nur noch Zeichen & Buchstaben übrig bleiben.

#include <iostream>
#include <string>
using namespace std;

int main ()
{
string s;
string a;
int laenge=0;
int alaenge=0;

cout << "String einlesen !!!" <<endl<<endl;
getline(cin,s);

s.length()= laenge;

for (int i=0; i<=laenge; i++)
{
if (s==' ');

..........

wie lösche ich genau dieses eine Zeichen!? Gibts da nicht einen Befehl?!


16 Antworten
Kellerlanplayer
Beigetreten: 02.12.2006

du gehst das array durch, wenn du nen leerzeichen findest, verschiebst du alle arrays danach eins nach vorne


makro1983
Beigetreten: 17.05.2008

s.erase ()

Damit soll ich das irgendwie realisieren!?
Checke den Befehl nicht ganz


makro1983
Beigetreten: 17.05.2008

Original von makro1983
s.erase ()

Damit soll ich das irgendwie realisieren!?
Checke den Befehl nicht ganz

Habe jetzt mal herumprobiert s.erase(0) "Stelle Null/Stelle 1" ... klappt net...

s.erase(s) ... klappt auch net


makro1983
Beigetreten: 17.05.2008

s.erase( 50, 13 );

ab zeichen 50 löscht man 13 stellen ... so sollte es gehen... ab leerzeichen lösche ich dann 1 stelle...


oleg196
Beigetreten: 26.12.2006

Quatch, geh den string von vorne durch und merke die Position für das erste nicht Leerzeichen. (Falls du am Ende ankommst ist das Ergebnis ein leerer String)

Gehe den string von hinten durch und merke wieder die position des letzten nicht Leerzeichens.

Nun kannst du string :: substr benutzen um das Ergebnis zu generieren.


makro1983
Beigetreten: 17.05.2008

#include <iostream>
#include <string>
using namespace std;

int main ()
{
string s;
string st;

int laenge=0;
int stlaenge=0;

cout << "Bitte schreibeeeen!!!!" << endl << endl;
cin >> s;

laenge = s.length();

for (int i=0; i<=laenge; i++)
{
if (s==' ')
{
s.erase(0,1);
}
}

st=s;

stlaenge = st.length();

for (int j=stlaenge; j>=0; j--)
{
if (st[j-1]= ' ')
{
s.erase(st[j-1],1);
}
}

cout << st << endl;
return 0;

}


oleg196
Beigetreten: 26.12.2006

marko, dein code geht nicht, weil sich der string verändert, während du drübergehst


makro1983
Beigetreten: 17.05.2008

#include <iostream>
#include <string>
using namespace std;

int main ()
{
string s;
string st;

int laenge=0;
int stlaenge=0;

cout << "Bitte schreibeeeen!!!!" << endl << endl;
cin >> s;

laenge = s.length();

for (int i=0; i<=laenge; i++)
{
if (s==' ')
{
s.erase(0,1);
}
if( s[i+1] != ' ')break;
}

st=s;

stlaenge = st.length()-1;

for (int j=stlaenge; j!= 0; j--)
{
if (st[j]== ' ')
{
st.erase(st[j],1);
}
if(st[j-1] != ' ')break;
}

cout << "]" << st << "[" << endl;
return 0;

}

Joa soweit bin ich jetzt...
Aber wenn ich Einen Satz eingebe lösche der mir mehr!?
Why?!


oleg196
Beigetreten: 26.12.2006

..marko ich finde den Ansatz deiner Lösung sehr schlecht. Versuche bitte einen anderen Ansatz, z.B. den von mir beschriebenen.


warum einfach wenns auch kompliziert geht oder wie?

string bla = "    dasdasasd    ";
int x = bla.find_first_not_of(" ");
bla = bla.substr(x, bla.find_last_not_of(" ")-x);
cout << bla;

oleg196
Beigetreten: 26.12.2006

Original von elbarto132
warum einfach wenns auch kompliziert geht oder wie?

weil marko was lernen soll?


Original von oleg196

Original von elbarto132
warum einfach wenns auch kompliziert geht oder wie?

weil marko was lernen soll?

aber vielleicht will er es ja garnicht lernen?


makro1983
Beigetreten: 17.05.2008

Original von elbarto132

Original von oleg196

Original von elbarto132
warum einfach wenns auch kompliziert geht oder wie?

weil marko was lernen soll?

aber vielleicht will er es ja garnicht lernen?

Doch :P "muss" ...

sollen es wie gesagt auch mir erase machen...
gucke gerade die andere variante... spästestens morgen kommt das


makro1983
Beigetreten: 17.05.2008

#include <iostream>
#include <string>

using namespace std;

int main ()
{

string s;

int laenge=0;
int vorne=0;

cout << "Eingabe des Strings" << endl;
getline (cin,s);

for (int i=0; s[0] == ' ' ;i++)
{
s.erase(0,1);
}

laenge = s.length();

for (int j=laenge-1; s[j] == ' '; j--)
{
s.erase (j,1);
}

cout <<"]"<< s <<"[" << endl << endl;

return 0;
}


GermanEagle89
Beigetreten: 15.12.2007

Habs mal in den richtigen Bereich verschoben :)


crt32
Beigetreten: 17.02.2007

Original von makro1983
#include <iostream>
#include <string>

using namespace std;

int main ()
{

string s;

int laenge=0;
int vorne=0;

cout << "Eingabe des Strings" << endl;
getline (cin,s);

for (int i=0; s[0] == ' ' ;i++)
{
s.erase(0,1);
}

laenge = s.length();

for (int j=laenge-1; s[j] == ' '; j--)
{
s.erase (j,1);
}

cout <<"]"<< s <<"[" << endl << endl;

return 0;
}

Passt zwar so, aber was wenn der String leer ist?
Versuch doch mal beide for Schleifen jeweils durch while Schleifen zu ersetzen. Die Zählvariable brauchst du nicht wirklich.