Strings und Funktionen
lima-city → Forum → Programmiersprachen → C/C++ und D
anmerkung
aussehen
beispiel
beitrag
break
dateiname
existenz
funktion
klasse
miteinander
nachtrag
operator
programmiersprache
schlampig betrachten
string
umgang
unterschied
vergleich
verzeichnis
window
-
Hallo,
ich leite das jetzt mal von meinen C-Kenntnissen ab:
1. Der Datentyp char speichert einen ganzzahligen Wert von 0 bis 254 (bzw. -127 bis 128). Weil ein ASCII-Zeichen im Prinzip nur eine Zahl ist, kannst du dem char auch ein Zeichen zuweisen, du kannst damit sogar rechnern. F?r ganze Zeichenfolgen solltest du aber doch die String-Klasse verwenden, sie ist komfortabler.
2. Theroetisch m?sste es mti beiden Typen m?glich sein; Eine Funktion kann nat?rlich auch ein Array zur?ckgeben. Ohne es jetzt sicher zu wissen, w?rde ich es so probieren wie du geschrieben hast. Was funktioniert denn daran nicht?
Wie gesagt, ich kenne mich mit C++ nicht wirklich aus sondern nur ein bissl mit C, hoffe aber trotzdem geholfen zu haben :-/
thw -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Im Prinzip hast du das schon richtig gemacht.
Nur eine Sache ist falsch: strlen() funktioniert nicht mit string-Objekten, sondern nur mit C-Strings, also Zeichenarrays. Entweder benutzt du da die Memberfunktion size() der Klasse string oder (wenn du unbedingt strlen() verwenden willst) du benutzt c_str() und ?bergibst den R?ckgabewert an strlen().
Also so:
strlen(Dateiname.c_str())
oder
Dateiname.size()
Die Kennzeichnung f?r den namespace std kannst du je nach Compiler komplett weglassen oder einfach nach dem include von <string> folgendes schreiben:
using namespace std;
Die while- und for-Schleifen brauchst du auch nicht. Es gibt entsprechende Funktionen daf?r:
find_first_of() bzw. find_last_of() statt while
und
substr() statt for
1.) Wie mu? ein String eigentlich aussehen. Macht es einen Unterschied ob ich die Klasse string verwende indem ich string.h einbinde oder ob ich ein Array aus Chars erzeuge alla: char mystring[] = "hallo";
Es gibt des sogenannten C-String (auch zero terminated string), der eigentlich nichts weiter als ein Array von char-Variablen ist.
Dann gibt es seit Einf?hrung der STL in C++ die Klasse string, die (bzw. deren Elternklasse) haufenweise Funktionen mitbringt f?r die Arbeit mit Strings.
Infos zu der Klasse selbst findest du unter:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfstringmembers.asp
Die abgeleiteten Memberfunktionen, die man immer wieder braucht findest du unter:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrf_string_BasicstringFunctions.asp
Die Funktionen f?r C-Strings sind weiter verstreut in der Doku, die meisten beginnen jedoch mit "str". Eine zwar nicht vollst?ndige, aber recht umfangreiche ?bersicht findest du hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_string_manipulation.asp
Um dir den Unterschied zwischen C-Strings und der Klasse string zu verdeutlichen, solltest du statt in Google vielleicht mal in die lima-city Tutorials schauen -
ttobsen schrieb:
Also die string Klasse zu verwenden ist doch sehr komfortable mu? ich sagen. Damit ist der Umgang doch wesentlicher an andere Programmiersprachen angepasst.
Also eigentlich ist es eher anders herum. Andere Programmiersprachen haben sich das Klassenkonzept von C++ geholt (wobei C++ sich das auch "geklaut" hat von rein objektorientierten Sprachen). Aber die erste so weit ausgereifte und standartisierte Stringklasse gab es meines Wissens nach unter C++.
ttobsen schrieb:
Mu? man sich in C++ eigentlich immer Strings als Array von Chars vorstellen?
Nein, das sind wie gesagt C-Strings. Die C++-Klasse, die du da benutzt ist ein richtiges Objekt.
ttobsen schrieb:
Weil in anderen Programmiersprachen darf man Strings ja eigentlich eher 'schlampig' betrachten und zum Beispiel Strings direkt miteinander vergleichen. Bei einem Array of Chars w?re das nicht so einfach m?glich, wie String1 == String2.
Das sind halt auch Klassen und keine C-Strings. Die heissen zwar alle String oder so ?hnlich, sind aber genau wie die string-Klasse in C++ Ausw?chse der OOP. Zum Vergleichen von C-Strings musst du die C-Funktion strcmp() oder eine ihrer Varianten benutzen***. Objekte der C++ string-Klasse kannst du, wie du es gewohnt bist, durch den ==-Operator vergleichen.
Deinen Code kannst du halt noch verbessern, indem du die Vorschl?ge in meinem letzten Beitrag beachtest.
*** = C-Strings kann man nat?rlich auch per Hand vergleichen:
char szick[] = "Hallo";
char szack[] = "Tobi";
int iGleich = 1;
for (int iTemp = 0; iTemp < strlen(szick); iTemp++)
{
if (szick[iTemp] != szack[iTemp])
{
iGleich = 0;
break;
}
if (szick[iTemp] == 0)
break;
}
if (iGleich)
printf("Strings gleich\n");
else
printf("String uterschiedlich\n");
Nachtrag:
B?h... benutze niemals nur i statt iTemp. Wenn du dann (<-- hier stand ein i in eckigen Klammern) statt [iTemp] schreibst, wird alles kursiv so wie jetzt hier auch
Beitrag ge?ndert am 4.11.2005 15:30 von 0-checka -
Die Funktion access()
(ANSI-C, daher unter Linux und Windows verf?gbar)
Link: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt__access.2c_._waccess.asp
Den Unterstrich am Anfang des Funktionsnamens, wie es in der Doku steht, kannst du normalwerweise weglassen. M?sste irgendwo in den Hederdateien ein define f?r geben. -
stat()
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt__stat.2c_._wstat.2c_._stati64.2c_._wstati64.asp
Die Anmerkungen f?r access gelten auch hier. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage