Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C++-Header in C umschreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.04.2006, 10:46 Uhr
~Neuling_Peter23
Gast


Hi,

ich soll einen Header, der in C++ geschrieben wurde, in C umschreiben. Leider hab ich überhaupt keine Ahnung von C++ geschweige denn von C.
Über die Unterschiede hab ich mich schon belesen und weiß auch, was zu ändern ist.
Doch finde ich keinen Ansatz um die Aufgabe zu erfüllen.

Vielleichet könnt ihr mal schauen und mir ein paar tips geben. Das wär Super!


C++:

#ifndef __CSTRING_H__
#define __CSTRING_H__

#include <string>
#include <vector>
using namespace std;
enum _eSFErgebnis
{
    eFehler,        //Zeichen gefunden, Bedingung nicht erfüllt
    eKorrekt,        //Zeichen gefunden, Bedingung erfüllt
    eKeinZeichen    //zu untersuchendes Zeichen nicht gefunden
};
typedef _eSFErgebnis eSFErgebnis;

class cKlasseString
{
public:
    //Die Prüftabelle ist im Konstruktor abgelegt
    //die Zuordnung zu den Fehlertabellen ebenfalls
    cKlasseString();
    //für ToUpper und ToLower wird der Konstruktor überladen
    cKlasseString(string szOriginal);
    ~cKlasseString();

    int Qalpha(string szString,string szModus,long *iFehlerNummer,long *iFehlerStelle);
    bool ToUpper(string *szUpper);
    bool ToLower(string *szLower);
    enum
    {
        eES,eMT,eLS,eAZ //AlleZeichen,ErsteStelle,MittelTeil,LetzteStelle
    } eTeil;
    enum
    {
        eName,
        eVorname,
        eVorsatzwort,
        eTitel,
        eBescheidEmpfaenger,
        eOrtInland,
        eStrasseInUndAusland,
        eGeburtsort,
        eNamenszusatz,
        eLand,
        eOrtAusland,
        eHausnummer,
        eAuslVSNR,
        eOrtMitPLZ,
        eAdresszusatz,
        ePLZAusland
    } eBegriff;
    enum
    {
        eGrossBuchstabe,
        eKleinBuchstabe,
        eZiffer,
        eEszett,
        eBlank,
        eBindestrich,
        ePunkt,
        eSchraegstrich,
        eApostroph,
        eKomma,
        eKlammerAuf,
        eKlammerZu,
        eUnd,
        eSonderFall   //Sonderfall für begriffsweite Sonderfälle
    }eZeichen;

private:


    //Memberfunktionen
    bool SetPArray(int iBegriff,int iTeil,int iGb,int iKb,int iZi,
                                              int iSz,int iBl,int iBs,
                                              int iPu,int iSs,int iAp,
                                              int iKo,int iKa,int iKz,
                                              int iUn);
    bool SetSFNr(int iSF01,int iSF02,int iSF03,int iSF04,int iSF05,
                 int iSF06,int iSF07,int iSF08,int iSF09,int iSF10,
                 int iSF11,int iSF12,int iSF13,int iSF14,int iSF15,
                 int iSF16,int iSF17,int iSF18);

    bool SetSonderfall(int iSF,int iBegriff,int iTeil,int iZeichen);
    bool SetZeichen(string szZeichen);
    bool SetSonderzeichen(string szSonderzeichen);
    bool SetVorsatzworte(string szVorsatzworte);
    bool SetNamenszusatz(string szNamenszusatz);
    bool SetFehlerArray();
    bool SetMemberVar(string szString,string szModus);

    bool CheckVorbedingung();
    bool CheckBegriffsSF();
    bool CheckPArray();
    bool CheckEinzelSF();
    bool CheckFehlerArray();

    //Prüfroutinen
    bool IstZeichenKorrekt(int iZeichen,int iTeil);
    bool IsGrossBuchstabe(string szPruefString,int iTeil);
    bool IsKleinBuchstabe(string szPruefString,int iTeil);
    bool IsZiffer(string szPruefString,int iTeil);
    bool IsZeichen(string szPruefString);

    //Sonderfälle
    //ein zurückgegebenes true bedeutetm dass
    //Bedingung erfüllt, die untersuchte Zeichefolge also korrekt ist
    eSFErgebnis IsSonderfall01(int iTeil);
    eSFErgebnis IsSonderfall02(int iTeil);
    eSFErgebnis IsSonderfall03(int iTeil);
    eSFErgebnis IsSonderfall04(int iTeil);
    eSFErgebnis IsSonderfall05(int iTeil);
    eSFErgebnis IsSonderfall06(int iTeil);
    eSFErgebnis IsSonderfall07(int iTeil);
    eSFErgebnis IsSonderfall08(int iTeil);
    eSFErgebnis IsSonderfall09(int iTeil);
    eSFErgebnis IsSonderfall10(int iTeil);
    eSFErgebnis IsSonderfall11(int iTeil);
    eSFErgebnis IsSonderfall12(int iTeil);
    eSFErgebnis IsSonderfall13(int iTeil);
    eSFErgebnis IsSonderfall14(int iTeil);
    eSFErgebnis IsSonderfall15(int iTeil);
    eSFErgebnis IsSonderfall16(int iTeil);
    eSFErgebnis IsSonderfall17(int iTeil);
    eSFErgebnis IsSonderfall18(int iTeil);
    //Membervariablen
    //Prüfmatrix mit Fehlernummern
    /*1. Ebene Begriffe

    0 Name
    1 Vorname
    2 Vorsatzwort
    3 Titel
    4 BescheidEmpfaenger
    5 OrtInland
    6 StrasseInUndAusland
    7 Geburtsort
    8 Namenszusatz
    9 Land
    10 OrtAusland
    11 Hausnummer
    12 AuslVSNR
    13 OrtMitPLZ
    14 Adresszusatz
    15 PLZAusland

    2.Ebene
    0 erste Stelle,
    1.Mittelteil
    2 letzte Stelle

    3.Ebene Zeichen
    */

    //je ein vektor für iSFNr, iBegriff,iTeil und iZeichen
    struct _sSFPos
    {
        vector<int> m_viNr;
        vector<int> m_viBegriff;
        vector<int> m_viTeil;
        vector<int> m_viZeichen;
    }m_sSFPos;


    //vektor für Fehlerkennzeichen (Position und Nummer)
    vector<char> m_vcFehlerArray;


    int m_aiPruefMatrix[16][3][13];


    //Sonderfallauswertung

    int m_aiSFNr[18];
    //Prüfregeln
    vector<char> m_vcZeichen;
    vector<char> m_vcSonderzeichen;
    vector<string> m_vszVorsatzworte;
    vector<string> m_vszNamenszusatz;




    //Stringbestandteile
    /*string m_szString;
    string m_szErsteStelle;
    string m_szMittelTeil;
    string m_szLetzteStelle;
    int    m_iBegriff;
    int    m_iFNummer;
    int    m_iFStelle;*/




    //Membervariable für ToUpper und ToLower
    string m_szOriginal;

};

#endif __CSTRING_H__

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.04.2006, 11:14 Uhr
stephanw
localhorst


Leider verstehe ich die Aufgabenstellung nicht ganz. Man kann nicht alle C++-Konstrukte in C umformulieren.

Zitat:
Über die Unterschiede hab ich mich schon belesen und weiß auch, was zu ändern ist.
Doch finde ich keinen Ansatz um die Aufgabe zu erfüllen.

Das macht keinen Sinn. Was willst Du denn ändern ? Schlag doch mal was vor, dann kann man darüber diskutieren.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.04.2006, 11:21 Uhr
~Neuling_Peter23
Gast


Also, in C gibt es ja keine Klassen. Wie kann ich die Klasse umschreiben, dass sie von einem C-Compiler compiliert wird? Ausserdem werden hier Vektoren benutzt. Man hat mir gesagt, dass ich daraus Arrays machen soll. Nur leider wollte man mir kein Beispiel dafür geben. Ich hab zuvor noch nie mit c++ gearbeitet!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.04.2006, 11:39 Uhr
stephanw
localhorst


Klassen in C ... Du könntest ein struct "String" definieren, was die nötigen Daten eines Strings enthält. Die Member-Funktionen kannst Du als C-Funktionen schreiben, die als zusätzlichen Parameter einen Zeiger auf ein struct "String" bekommen (das ist dann der in C++ implizit vorhandene this-Zeiger).

und so weiter...

Wenn Du jedoch weder von C noch von C++ irgendeine Ahnung hast, warum bekommst Du dann solche Aufgaben ?
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.04.2006, 11:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


imho ist die aufgabe ziemlicher unfug, die obige datei zu ver"c"en ist ein ziemlicher schwachsinn. Sowas schreibt man halt dann direkt neu und anders, bei so einem "Umbau" kommt sonst meist nur schwachsinn raus.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.04.2006, 12:06 Uhr
ao

(Operator)



Zitat von ~Neuling_Peter23:
Ausserdem werden hier Vektoren benutzt. Man hat mir gesagt, dass ich daraus Arrays machen soll.

Jein. Vektoren können viel mehr als blöde Arrays, und vor allem verpacken sie die fehlerträchtige Zeiger-Fiddelei in ein sicher handhabbares API. Das solltest du auch machen, ein struct vector schreiben und einen Satz Handling-Funktionen dafür. Natürlich nicht das komplette vector<>-Template, sondern nur die Teile, die du brauchst, vgl. die Implementierung der C++-Klasse.

Verkompliziert wird das noch dadurch, dass vector in C++ ein Template mit parametrierbarem Basistyp ist (vector<int>, vector<char>, ...). Sowas kann man in C mit dem Präprozessor nachbilden, oder über einen generischen Basistyp (char-Array der entsprechenden Größe). Aber bei vector<string> wird auch das echt haarig.

So oder so, auf keinen Fall ist das ne Aufgabe für Anfänger.

Was soll das überhaupt werden? Eine Klasse von C++ nach C portieren ergibt ja für sich genommen überhaupt keinen Sinn. Kommt da noch mehr?

Und wieso ausgerechnet C? Ist das ne Strafarbeit, hast du jemanden zu sehr genervt?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: