Hilfe bei kleinem Programm
-
RedLine schrieb:
Welches Forum denn??? Dachte das wäre C++
Bis auf die Klasse an sich (ohne Implementationen) und den Header
<iostream>, welcher du gar nicht benötigst, ist in deinem Code alles C. Falls deine Professor dir dies beigebracht hat, dann gratuliere ich dir. Du bist Student Nummer 9999999999999999... (sehr grosse Zahl), welcher einen unfähigen Professor hat, welcher kein C++ kann.Zu deiner Frage:
Stell bitte ein wenig konkretere Fragen. Was genau verstehst du nicht?Grüssli
-
Laut ISO-Standard wird die main-Funktion als integer deklariert.
int strings::count() //integer, erwartet einen dezimalen rückgabewert { return strlen(myStr); //strlen( ) erwartet einen string als parameter und gibt //die Zeichenlänge des strings zurück. } void strings::Chinese() { for(int i=0; i<strlen(myStr);i++){ //inkrementiere i, bis der string //komplett durchlaufen wurde if(myStr[i]=='r'){ //falls ein element des strings = "r" ist myStr[i]='l'; //übernehme das literal "l" für das element } else if (myStr[i]=='R') { //anderenfalls, wenn das element = "r" ist myStr[i]='L'; //übernehme das literal "L" für das element } } } void strings::Capital() { for(int i=0; i<strlen(myStr);i++) //loop für eine komplette string länge { if(myStr[i] > 96 && myStr[i] < 123) //ist ein element größer als 96 und //kleiner als 123 { myStr[i] -= 32; //dann subtrahiere davon 32 } } } void strings::Cut() { for(int i=0; i<strlen(myStr);i++) //loop für eine komplette string länge { if(myStr[i]==32) //falls ein string = 32 ist { myStr[i]='\0'; //definiere ihn mit einem '\0'-byte (zeilenumbruch) } } }EDIT:
Hoppala, gerade war es nur 1 Antwort...
-
Laut ISO-Standard wird die main-Funktion als integer deklariert
oO
Vll besser so:Laut ISO-Standard besitzt die main-Funktion einen Rückgabewert: int
dort steht dann imho so was in der richtung drin:
erlaubt sind folgende signaturen:
`int main(int argc, char *argv[])
int main(int argc, char**argv)
int main()
`
und dann steht da imho noch so was, wie:
[es sind auch alle anderen signaturen erlaubt, so lange die main-fkt den rückgabetyp int hat]
bin nur gerade (ma wieder ^^) zu faul, genau nachzugucken...bb
-
Super, danke das bringt mich schonmal ein großes Stück vorran

Acchhhssoooo, ja das wusste ich nicht, dachte mein Prof. könnte das und laufen tut es ja auch so
Aber jetzt weis ich ja bescheid.
-
Btw: Der Typ einer Funktion gehört nicht zur Signatur.
-
Es haben ja schon einige gesagt, aber dein Prof hat wirklich Ahnung von nichts. Da lernst du mehr aus einem Second-Hand Tutorial aus dem Internet über C++. Erstmal vermischt er C mit C++, autsch! Wie schon gesagt, gehört zu dem Standard, dass die main int zurückgibt. Meine IDE verlangt sogar von mir, dass main int zurückgibt, ansonsten lässt es mich nicht compilieren. Ich kenn mich kaum mit C aus, aber ich glaube mit free rumzuhantieren ist nicht gut (muss jetzt nicht stimmen, vielleicht hab ich mich verhört, deswegen verbessert mich falls es falsch ist). Falls du den Code wirklich so belassen willst, kannst du iostream rausnehmen, da du sowieso nichts aus C++ benutzt, außer eine Klasse und kannst stattdessen stdio.h benutzen.
Nun zu deiner Codeerklärung.
strings::count() sollte eigentlich klar sein. Es gibt die größe deines "Strings" zurück. An deiner Stelle würde ich aber das count in z.B. size oder length umbennen, denn deine Methode zählt nichts, sondern gibt einen Wert zurück. Die Methode von string, heisst auch size und zählt auch nichts.
Die Methode Chinese versucht einen chinesischen Dialekt nachzumachen und geht Zeichen für Zeichen den "String" durch und sucht nach einem "r" oder "R" und ersetzt es durch ein "l" oder "L".
Deine Methode Capital ersetzt jeden kleinen Buchstaben in einen großen. Such in Google nach "ASCII Tabelle" und schau mal nach 96 und 123. 96 ist "`" und 123 "{". Dann wird in der for-Schleife jedes Zeichen geprüft, ob es über 96 und unter 123 ist. D.h. die Zahl muss min. 97 oder max. 122 sein.
In C++ kannst du nämlich z.B. sowas machen:#include <iostream> int main() { char test_char = 97; std::cout << test_char; //bzw. int test_int = 'a' std::cout << test_int; }Die Ausgabe wird "a" und einmal "97" sein.
Nun zur letzten Methode, deine Cut Methode.
Diese geht wieder jedes Zeichen in deinem "String" durch und schaut nach einem Leerzeichen. Wird eins gefunden, wird dort das Nullzeichen gesetzt, was den Rest des Strings terminiert.Ich hoffe ich konnte helfen.
mfg
-
Es haben ja schon einige gesagt, aber dein Prof hat wirklich Ahnung von nichts.
Du aber, hm?
Ich habe das Gefühl, dass du und RedLine nicht sehr bewandert seid. Entweder stammt der Code nicht von einem Professor oder er versucht euch C zu lehren.Da lernst du mehr aus einem Second-Hand Tutorial aus dem Internet über C++.
Na du musst es ja wissen...
compilieren
Unbewanderte schreiben kompilieren mit c, hihi...
mit free rumzuhantieren ist nicht gut
Warum nicht? Ist daraus zu schliessen, dass du malloc( ) auch nicht gut findest?
-
Was willst du jetzt eigentlich von mir? Ich helfe hier ganz normal und ich denke mal, es gibt nicht wirklich Fehler in meinem Text. Willst du mir sagen das ich mit dem was ich geschrieben habe nicht Recht habe? Es neigen immer mehr Leute dazu unnötige Kommentare abzugeben die den Thread kein Stück weiterbringen. Einer dieser Leute ist jetzt z.B. du. Anscheinend meinst du ich hab keine Ahnung von C++, dass ist dann deine Meinung. Willst du mir also sagen, dass man durch den Code mehr lernt als durch ein billiges C++ Tutorial im Internet? Wohl kaum. Dein Wortschatz scheint auch ein wenig begrenzt zu sein:
nicht sehr bewandert
Unbewanderte
Zwar hast du was geschrieben, jedoch glaube ich das mein Post ein wenig mehr verständlich ist.
Sowas wiemyStr[j] -= 32; //dann subtrahiere davon 32ist wohl selbsterklärend...
Und klar Kóyaánasqatsi, du hast mit deiner Aussage einen klassen Widerspruch geleistet.
"Entweder nicht von einem Prof, oder er versucht euch C zu lehren"...
Deswegen bringt er ihnen auch C mit Klassen bei
Über free() meinte ich extra, dass ich mir nicht sicher bin und ob ich es gut finde habe ich auch nicht geschrieben. Wenn wir in einem C++ Forum sind und ich teilweisen C++ Code sehe, dann schreibe ich wohl das free() bzw. malloc() nicht gut ist oder? Wofür gibt es new und delete?
-
Bitte kein Streit hier

Habe noch eine kleine Frage undzwar
strings object_s(250);Bedeutet das, das die Stringlänge 250 ist?
Was für mich unlogisch wäre, da die max.stringlänge ja vorher schon mit 200 angeben wurde???
-
RedLine schrieb:
strings object_s(250);Bedeutet das, das die Stringlänge 250 ist?
Was für mich unlogisch wäre, da die max.stringlänge ja vorher schon mit 200 angeben wurde???
Die =200 im Konstruktor sind ein Default-Wert. D.h. wenn Du keine Länge angibst wird ein char-Feld der Länge 200 angelegt.
RedLine schrieb:
.. ja das wusste ich nicht, dachte mein Prof. könnte das und laufen tut es ja auch so
Nein - tut es nicht. Zumindest nicht in jedem Fall. Füge doch mal in dem kleinen main folgendes ein:
void malsehn( object_s x ) { std::cout << "der String hat die Laenge: " << x.count() << std::endl; } // test environment for functions void main() { strings object_s(250); object_s.Insert("Frohe Ostern!"); malsehn( object_s ); object_s.Display(); // usw.das führt zu undefiniertem Verhaltem - im Debug-Mode sollte sich eine aussagekräftige Fehlermeldung zeigen.
Abgesehen davon enthält der Code noch ca. ein Dutzend mehr oder weniger schwerer Fehler. Und ich hatte auf Grund dieses Kommentars in Zeile 6
class strings // contains all sort of nonsense keeping students busyangenommen, es ist die Aufgabe der Studenten, die alle zu finden - oder?
Gruß
Werner
-
Eigentlich war das nicht die Aufgabe

Habe aber auch schon einige beseitigt mit das Programm überhaupt lief
