PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ frage


Gast
2005-06-18, 11:58:07
Hallo, ich hab einige fragen zu folgenden Programm:

#include <conio.h>
#include <iostream.h>
#include <string.h>

void cutline(void);
string line;

void main()
{
while(getline(cin, line));
{
cutline();
cout<<line<<endl;
}


getch();
}

#include <string>

extern string line;
void cutline()
{
int i = line.size();
while( --i>=0)
if(line[i]!=' ' && line[i] !='\t')
break;
line.resize(++i);
}

Frage: was genau macht das Programm hier:

{
int i = line.size();
while( --i>=0)
if(line[i]!=' ' && line[i] !='\t')
break;
line.resize(++i);
}

Die schleife raff ich irgendwie nicht so richtig
Thx im voraus

Coda
2005-06-18, 12:06:45
Das ist kein C++ Program.

swr1973
2005-06-18, 12:38:32
Hallo,

Meiner Meinung sollte die Schleife eine Zeile von rechts nach links durchgehen, solange bis kein Zeichen gefunden was einem Space oder Tabulator entspricht.
Dann wird der String ab da abgeschnitten.

Wenn ich mir das Programm aber so anschaue, wird die Schleife hoechstwahrscheinlich gar nicht durchlaufen, weil unter Umstaenden ein "\n" an der letzten Stelle steht (bin mir nicht ganz sicher bei getline).

Uebrigens ist es in teilen schon c++, weil std::string gehoert meines wissens nach nicht zu C (da es ja intern eine Klasse ist).

Gruss
sven

swr1973
2005-06-18, 12:40:06
Hallo nochmal,

die Schleife wird doch durchlaufen, da ja ein --i gemacht wird. Somit wird das letzte Zeichen ('\n') uebersprungen.

Gruss
Sven

Coda
2005-06-18, 13:09:29
Uebrigens ist es in teilen schon c++, weil std::string gehoert meines wissens nach nicht zu C (da es ja intern eine Klasse ist).Es gibt kein <iostream.h>, nur <iostream>, genauso gibt es kein <string.h>

Matrix316
2005-06-18, 15:15:51
Es gibt kein <iostream.h>, nur <iostream>, genauso gibt es kein <string.h>

Kann ein reiner c compiler sachen wie cout << "irgendwas"; kompilieren? ;) Und natürlich gibts iostream.h

RoKo
2005-06-18, 15:59:37
Es gibt kein <iostream.h>, nur <iostream>, genauso gibt es kein <string.h>
Doch gibt es - C++ verlangt diese nicht, wird sich aber hüten, Dir vorzuschreiben, was Du in Dein Include-Verzeichnis packen kannst ;)
Wenn Du kleinlich wärst, könntest Du allenfalls über ein einziges fehlendes std:: meckern. Aber da Du helfen und nicht nerven willst, wirst Du das sicher nicht tun ;)

Trap
2005-06-18, 16:55:16
void main(...) ist auch nicht standardgemäß (es muss int main() heißen...).

<iostream.h> kann alles mögliche enthalten (oder auch garnicht existieren), standardgemäß und mit garantiertem Inhalt ist nur <iostream>.

Schleifen versteht man am besten wann man anguckt was während jedem Schleifendurchlauf gleich bleibt oder was gilt wenn die Schleife endet.

while( --i>=0)
if(line[i]!=' ' && line[i] !='\t')
break;
endet wenn i<0 oder (line[i]!=' ' && line[i]!='\t'). Es sucht also von hinten das erste ' ' oder '\t' Zeichen...

Vedek Bareil
2005-06-19, 03:01:13
Es gibt kein <iostream.h>, nur <iostream>, genauso gibt es kein <string.h>wenn du dir aber mal deine iostream-Datei (also die ohne Dateienung .h)anguckst, wirst du feststellen, daß da nicht viel mehr als #include<iostream.h> drinsteht ;)

Trap
2005-06-19, 11:04:07
wenn du dir aber mal deine iostream-Datei (also die ohne Dateienung .h)anguckst, wirst du feststellen, daß da nicht viel mehr als #include<iostream.h> drinsteht ;)
Das ist ganz sicher compilerspezifisch.

Bei mir (MinGW) steht drin #include<istream> und #include<ostream> und noch ein wenig anderes Zeug...

Es gibt/gab auch einen Compiler bei dem in <iostream> die standardisierten IO-Streams drin sind und in <iostream.h> die IO-Streams wie sie vor der C++ Standardisierung existiert haben (beides inkompatibel zueinander).

Aqualon
2005-06-19, 11:07:37
wenn du dir aber mal deine iostream-Datei (also die ohne Dateienung .h)anguckst, wirst du feststellen, daß da nicht viel mehr als #include<iostream.h> drinsteht ;)Beim GCC ist das zwar der Fall, beim MSVC++ schaut es aber wieder anders aus. Dort gibt es keine iostream.h sondern nur iostream, die istream includet, die wiederum ostream includet, die wieder... (lassen wir das, es geht noch ein paar Hierarchiestufen weiter).

Ich kenne mich nicht so genau damit aus, aber ich denke im C++ Standard ist nur iostream definiert und nicht, wie die Header-Datei genau aussehen muss.

Aqua

Coda
2005-06-19, 11:45:33
wenn du dir aber mal deine iostream-Datei (also die ohne Dateienung .h)anguckst, wirst du feststellen, daß da nicht viel mehr als #include<iostream.h> drinsteht ;)Nein. Erstenes ist in <iostream> der Namespace definiert und in <iostream.h> nicht und zweitens unterscheiden sich die non-standard Klassen in <iostream.h> sehr wohl von denen in <iostream>.

Das kann bei anderen Compilern anders sein, weil es keinen Standard dafür gibt. Aber dann sollte man es ja noch viel eher vermeiden, oder nicht?

Legolas
2005-06-19, 12:48:45
Das kann bei anderen Compilern anders sein, weil es keinen Standard dafür gibt. Aber dann sollte man es ja noch viel eher vermeiden, oder nicht?

Eben, warum sollte man sich gerade nicht an den Standard halten? Ich verstehe gar nicht, warum es darüber überhaupt eine so ausufernde Diskussion geben kann.

/me
2005-06-20, 12:53:14
Das ist ganz sicher compilerspezifisch.

Es ist nicht einmal vorgeschrieben, ob das überhaupt Dateien sein sollen. Hauptsache es funktioniert. Wie der Compiler das macht, ist egal.

Und zum Thema: Wenn man irgendeinen Programmcode verstehen will, kann man ihn, solang er noch kurz und einfach ist, einfach mal im Kopf oder mit Blatt und Stift, mit Beispieldaten durchmachen. Danach weiß man, was der Code macht.

HellHorse
2005-06-20, 13:44:06
Und zum Thema: Wenn man irgendeinen Programmcode verstehen will, kann man ihn, solang er noch kurz und einfach ist, einfach mal im Kopf oder mit Blatt und Stift, mit Beispieldaten durchmachen. Danach weiß man, was der Code macht.
Ich empfehle dafür eher einen Debuger.

/me
2005-06-20, 14:00:00
Ich empfehle dafür eher einen Debuger.

Hätte ich auch fast geschrieben, aber man kann ja auch selber ein bisschen nachdenken. So lange die Programme noch so einfach sind, geht das ja noch problemlos.

Außerdem verwirrt ein Debugger am Anfang mehr, als er bringt.

HellHorse
2005-06-20, 15:11:02
Außerdem verwirrt ein Debugger am Anfang mehr, als er bringt.
Irgendwann muss man lernen ihn zu bedienen.