kostenloser Webspace werbefrei: lima-city


Strings und Funktionen

lima-cityForumProgrammiersprachenC/C++ und D

  1. 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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 0******a

    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 ;-)
  4. 0******a

    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++)
    {
    &nbsp;&nbsp;if (szick[iTemp] != szack[iTemp])
    &nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;iGleich = 0;
    &nbsp;&nbsp;&nbsp;&nbsp;break;
    &nbsp;&nbsp;}

    &nbsp;&nbsp;if (szick[iTemp] == 0)
    &nbsp;&nbsp;&nbsp;&nbsp;break;
    }

    if (iGleich)
    &nbsp;&nbsp;printf("Strings gleich\n");
    else
    &nbsp;&nbsp;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
  5. 0******a

    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.
  6. 0******a

    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.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!