# C-Programm Hilfegesuch

## UTgamer

Hallo, ich versuche gerade C/C++ zu erlernen und habe mich gerade durch http://de.wikibooks.org/wiki/C-Programmierung gearbeitet und nun doch noch einige offene Fragen.

Ich habe eine einzelne mehrere MB große HTML-Datei und möchte wechselhaften Parametern in den Strings mitten drinn herauslöschen. Siehe diesem Beispielausschnitt:

```
        <DT><H3 ID="rdf:#$ln3op3">Autos &amp; Verkehr</H3>

        <DL><p>

            <DT><H3 LAST_MODIFIED="1228844803" ID="rdf:#$mn3op3">Autogas</H3>

            <DL><p>

...

...

...

                <DT><A HREF="http://www.clever-tanken.de/" ID="rdf:#$un3op3">clever-tanken.de</A>

                <DT><A HREF="http://www.propan.de/tanken/tanken.html" ID="rdf:#$vn3op3">Tankstellen und Tankanlagen - AutoGas (LPG)</A>

                <DT><A HREF="http://www.dvfg.de/autogas/frames/tanken/bundesl/rheinland.html" ID="rdf:#$wn3op3">TankstellenÃ¼bersicht_Rheinland Pfalz</A>

                <DT><H3 ID="rdf:#$xn3op3">Tankstellen</H3>

                <DL><p>

                    <DT><A HREF="http://www.autogas-maassen.de/tankstellen.html" ID="rdf:#$yn3op3">http://www.autogas-maassen.de/tankstellen.html</A>

                    <DT><A HREF="http://www.autogastanken.de/index.php?session=5trnv65grqfqms78te0qefa6h2&amp;entryid=22&amp;Firmenid=1939" ID="rdf:#$zn3op3">AUTOGAS   (Bielefeld, NÃ¤he A2)</A>

                </DL><p>

                <DT><A HREF="http://www.westfa.de/index.php?id=15&amp;objId=1" ID="rdf:#$An3op3">WESTFA   [Trier]</A>

                <DT><A HREF="http://www.gas-tankstellen.de/" ID="rdf:#$Bn3op3">www.gas-tankstellen.info</A>

                <DT><A HREF="http://www.autogastanken.de/index.php?session=5trnv65grqfqms78te0qefa6h2&amp;entryid=5&amp;ih=805" ID="rdf:#$Cn3op3">AUTOGAS   (Tankstellen)</A>

                <DT><H3 ADD_DATE="1228844803" LAST_MODIFIED="1228844806" ID="rdf:#$YivVc1">Vialle</H3>

                <DL><p>

                    <DT><A HREF="http://www.vialle-center-sueddeutschland.de/index.php?option=com_content&task=view&id=33&Itemid=2" ADD_DATE="1228844808" LAST_CHARSET="ISO-8859-1" ID="rdf:#$ZivVc1">VIALLE Center SÃ¼d - CarConcepts Ilg - Mitsubishi</A>

                    <DT><A HREF="http://www.onlineview.de/kaya/Einbauanleitungen/Mitsubishi/" ADD_DATE="1228845463" LAST_CHARSET="ISO-8859-15" ID="rdf:#$.ivVc1">Index of /kaya/Einbauanleitungen/Mitsubishi</A>

                    <DT><A HREF="http://www.umbscheiden.de/" ADD_DATE="1228846763" LAST_VISIT="1228846793" LAST_CHARSET="ISO-8859-15" ID="rdf:#$+ivVc1">von UMBSCHEIDEN - Spezialisten aus Ãberzeugung</A>

                    <DT><A HREF="http://www.vdafg.com/" ADD_DATE="1228846872" LAST_CHARSET="ISO-8859-1" ID="rdf:#$0jvVc1">Verband Deutscher AutowerkstÃ¤tten fÃ¼r Gasantrieb e.V.</A>

                </DL><p>

            </DL><p>

            <DT><H3 ID="rdf:#$Dn3op3">Erdgas</H3>

            <DL><p>

                <DT><A HREF="http://www.erdgasfahrzeuge.de/starthtml/erdgasfahrzeug_fahrzeuge.html" ID="rdf:#$En3op3">Erdgasfahrzeuge, Fahrzeuge</A>

                <DT><A HREF="http://www.gibgas.de/german/index.html" ID="rdf:#$Fn3op3">www.gibgas.de - Information und Service Ã¼ber Erdgasfahrzeuge</A>

                <DT><A HREF="http://www.erdgasinfo.de/2271.htm" ID="rdf:#$Gn3op3">Willkommen bei Erdgasinfo.de</A>

                <DT><A HREF="http://www.gas.de/" ID="rdf:#$Hn3op3">Gas.de im information.de Netzwerk</A>

                <DT><A HREF="http://www.tartarini.de/#" ID="rdf:#$In3op3">Tartarini</A>

                <DT><A HREF="http://www.bundesfinanzministerium.de/Anlage9466/KfZ-Steuer-fuer-PKW.pdf" ID="rdf:#$Jn3op3">KfZ-Steuer-fuer-PKW.pdf</A>

                <DT><A HREF="http://www.erdgaspilot.de/" ID="rdf:#$Kn3op3">:::. ErdgasPilot .:::</A>

                <DT><A HREF="http://www.clevertanken.de/index.asp" ID="rdf:#$Ln3op3">clever-tanken.de (Tankst. falsch bei GAS)</A>

                <DT><A HREF="http://www.ewe-gis-power.de/sdims/demo/index.htm?/sdims/demo/werkstatt.htm" ID="rdf:#$Mn3op3">Der Geonavigator der EWE Aktiengesellschaft</A>

                <HR>

                <DT><A HREF="http://www.ford-strunk.de/" ID="rdf:#$On3op3">Ford Strunk</A>

                <DT><A HREF="http://www.auto-service-busse.de/" ID="rdf:#$Pn3op3">Auto Service Busse</A>

                <DT><A HREF="http://www.wagner-auto.de/" ID="rdf:#$Qn3op3">Autohaus Wagner ErdgasumrÃ¼stung Autohandel Werkstatt</A>

                <DT><A HREF="http://www.buckcars.de/" ID="rdf:#$Rn3op3">BUCK GMBH</A>

                <DT><A HREF="http://www.gas-autogasanlagen.de/index.html" ID="rdf:#$Sn3op3">GAS Autogasanlagen GmbH Sachkundigenwerkstatt Einbauservice</A>

                <DT><A HREF="http://www.autointell.de/News-deutsch-2001/Juli-2001/Juli-18-01-p9.htm" ID="rdf:#$Tn3op3">CNG-Technik: Deutliche Preissenkung fÃ¼r UmrÃ¼stung von Ford-Fahrzeugen auf Erdgas</A>

            </DL><p>

            <DT><H3 ID="rdf:#$Un3op3">Hersteller</H3>

...

...

...

...
```

Ich möchte diese beiden Sorten von wechselhaften Strings herrauslöschen: *Quote:*   

> ID="rdf:#$Dn3op3" , ID="rdf:#$En3op3" , ... , ADD_DATE="1228846872" ,  ADD_DATE="1228846763"

 

Um aufzuzeigen wie wenig ich bisher an C in Richtung Strings zusammenbekomme habe ich mal diesen nicht funktionierenden Quellcode verbrochen:

```
#include <string.h>   // fuer Zeichenketten-Manipulation

#include <stdio.h>    // fuer printf()

unsigned replace_character(char* string, char from, char to)

{

  unsigned result = 0;

  if (!string) return 0;

  while (*string != 0) {

    if (*string == from) {

      *string = to;

      result++;

    }

    string++;

  }

  return result;

}

int main(void)

{

  FILE *datei;

  char text[150000];

  datei = fopen ("testdatei1.html", "r");

  fscanf (datei, "%150000c", text);

  unsigned result;

  result = replace_character(text, 'e', ' ');

  printf("%u : %s\n", result, text);

  return 0;

}

```

A) char text[150000];  ist nicht optimal, da die zu bearbeitenden HTML-Datei um die 5MB groß ist, ein oder 2 Nullen noch hinzuzufügen verkraftet mein RAM noch darüber hinaus bekomme ich Speicherzugriffsfehler. Das muß doch auch automatisch Stringtextgrößenmäßig gehen.

B) Der Ersetzen-Code wie oben probiert ist erstens nur für einzelne Zeichen und zweitens funktioniert obiger auch nicht mal.

C) - Ist offtopic zur Hilfsanfrage, wie schreibe ich grundsätzlich zweistellige z.B. Preisangaben? Float sind 6 Stellen hinterm Komma und Integer Null. :/[/code]

--------------

Keine Ahnung ob mir hier jemand in Bezug auf GCC weiter helfen kann, danach würde ich mich aber wesentlich fitter in Sachen Programmierung fühlen können. Ich habe nämlich den netten Umstand gerade Zeit zum Erlernen übrig zu haben. Mathe ist wesentlich einfacher als Stringbearbeitung in C.  :Rolling Eyes: 

Hatte mich zuerst in Basic eingearbeitet und danach festgestellt das kein einziges IDE Gui-Frontend unter 64Bit Gentoo zum sauberen funktionieren zu bewegen zu ist.   :Mad: 

Jetzt lerne ich auf GCC und habe funktionierend als IDE Qt-Creator, gute Beispiele für diese IDE habe ich auch zuhauf gefunden, aber was bringt eine IDE ohne Hintergrundwissen, auch wieder nichts.

----------

## Necoro

Erstens: Für sowas würde ich dir (wenn du schon unbedingt C/C++ verwenden willst), denn doch eher zu C++ raten. Da hast du denn ordentliche String-Klassen und so zur Verfügung und weniger char*-Gehample.

Zweitens: Warum überhaupt die ganze Datei auf einmal Lesen? Warum nicht Zeile für Zeile?

Drittens: Wenns keine fertige Decimal-Klasse in der C++-STL gibt, einfach eine selber bauen  :Smile: 

/edit: Ich weiß, das ist nicht das was du hören willst: Aber für solche Textverarbeitungsaufgaben sind Skriptsprachen (Perl, Python, ...) doch um einiges schöner als C oder C++.

/edit2: Und noch besser wäre wahrscheinlich, wenn du dir tinyxml oder so anschaust ... und das ganze nicht als großen String, sondern als XML-Dokument auffasst und denn dementsprechend deren Struktur manipulierst. Ist sicherlich gesünder  :Smile: 

----------

## UTgamer

 *Necoro wrote:*   

> Erstens: Für sowas würde ich dir (wenn du schon unbedingt C/C++ verwenden willst), denn doch eher zu C++ raten. Da hast du denn ordentliche String-Klassen und so zur Verfügung und weniger char*-Gehample.
> 
> Zweitens: Warum überhaupt die ganze Datei auf einmal Lesen? Warum nicht Zeile für Zeile?
> 
> Drittens: Wenns keine fertige Decimal-Klasse in der C++-STL gibt, einfach eine selber bauen 
> ...

 

Dank dir, mir sagt der Unterschied von C zu C++ noch nicht so viel und mit guten Tutorials für GCC müßt ich mich dann eben in C++ einarbeiten, GCC macht ja glücklicherweise beides.

Zu Zweitens: Ich muß die nicht am Stück bearbeiten, zeilenweise erfüllt ja den gleichen Zweck.   :Wink: 

Zu drittens, ist das kleinere Problem und werde ich früher oder später schon noch drauf stoßen.

----------

## mv

Selbstverständlich gibt es Währungen in den C++ STL Lokalisierungen. Eine schnelle Suche nach C++ STL Währung ergibt so etwas (ich habe es nicht durchgelesen).

Das Problem klingt aber eher so, als wäre weder C noch C++ die geeignete Sprache dafür (außer die Geschwindigkeit ist extrem wichtig). So etwas macht man mit perl. Zum HTML-Parsen gibt es da auch eigene Klassen. Mit perl6 (rakudo) geht das Ganze sicher noch besser, aber wer weiß, ob sich perl6 jemals weit verbreiten wird...

----------

## Necoro

 *UTgamer wrote:*   

> Dank dir, mir sagt der Unterschied von C zu C++ noch nicht so viel und mit guten Tutorials für GCC müßt ich mich dann eben in C++ einarbeiten, GCC macht ja glücklicherweise beides.

 

Mich wundert das "Tutorial für GCC" - normalerweise lernt man eine Sprache und nicht einen Compiler  :Very Happy: . C++ und C sind schon komplett getrennte Sprachen, nur dass C++ halt auch C (teilweise) beherrscht.

----------

## franzf

Zu den Float-Sachen: Das willst du doch nur für die Konsolenausgabe anpassen, oder?

http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

(Achtung: cstring ist der include für C++. Den gibt es für C nicht, da brauchst du string.h - nur so nebenbei, wenn du Probleme mit den Beispielen bekommen solltest  :Wink: )

Wenn du einen int hast und den als double ausgeben willst kannst du das ja casten:

```
std::cout << static_cast<double>(integral_value) << "\n";
```

Ansonsten hat Necoro recht, für solche Sachen bist du mit Scripten schneller.

Und noch ganz zum Schluss:

C/C++ gibt es nicht! Es gibt C und es gibt C++. Beide haben eine gewisse Schittmenge. Aber wenn du C mit C++-Programmen vergleichst ist das was grundverschiedenes. Speicherallokation mit malloc in C++ und du bekommst (in 95% der Fälle) einen übergebraten  :Wink:  Klassen, Vererbung, templates - das geht in C nicht/schwer. USW.

----------

## mv

 *UTgamer wrote:*   

> mir sagt der Unterschied von C zu C++ noch nicht so viel und mit guten Tutorials für GCC müßt ich mich dann eben in C++ einarbeiten, GCC macht ja glücklicherweise beides.

 

Der Compiler (gcc oder anderes) spielt eine eher untergeordnete Rolle - die Erweiterungen, die es nur im gcc gibt werden Dich nur in Ausnahmefällen tangieren. Du musst erst einmal die Sprache richtig lernen. Der Hauptvorteil von C++ gegenüber C ist, dass C++ mit der STL-Bibliothek vernünftige Datentypen bereitstellt. Statt beispielsweise mit C einen String oder Heap mühsam mit Zeigern zu bearbeiten oder durch expliziten Aufruf einer komplexen Bibliothek, geht so etwas mit C++ fast von selbst. Gerade bei Strings sparst Du Dir dadurch das Zeiger-Gemurkse und Memory-hin-und-her-allokieren-und-schieben. Nur bei extrem zeitkritischen Sachen ist mehr manueller Eingriff nötig. Du kannst ja i.W. zunächst mal C++ wie C programmieren und nur die string-Bibliotheken benutzen. Mit der Zeit kommt dann schon mehr. Hier ist etwas zum Einlesen

----------

## mv

 *franzf wrote:*   

> Speicherallokation mit malloc in C++ und du bekommst (in 95% der Fälle) einen übergebraten 

 

Das ist so natürlich Unfug. Man kann schon sagen, dass C++ eine Obermenge von C ist. Natürlich gibt es im Standard ganz leichte Unterschiede, aber diese merkt man erst, wenn man schon sehr tief in den Details steckt.

Die andere Sache ist, was man in der Praxis tut: Wenn man schon C++ zur Verfügung hat, wird man in der Regel auch selbst Klassen schreiben und nicht nur C-ähnlichen Code. Aber gerade am Anfang würde ich das nicht versuchen, zu erzwingen... das kommt dann schon von selbst, wenn Du etwas Erfahrung hast.

----------

## UTgamer

Dank dir auch;

 *franzf wrote:*   

> Zu den Float-Sachen: Das willst du doch nur für die Konsolenausgabe anpassen, oder?
> 
> http://www.cplusplus.com/reference/iostream/manipulators/setprecision/
> 
> (Achtung: cstring ist der include für C++. Den gibt es für C nicht, da brauchst du string.h - nur so nebenbei, wenn du Probleme mit den Beispielen bekommen solltest )
> ...

 

Ist brauchbar. Und das glaube ich das Scripte schneller sind. War eben ein Versuch es als mein erstes Projekt anzugehen. Gebe das Projekt wohl besser wieder auf.

 *franzf wrote:*   

> 
> 
> Und noch ganz zum Schluss:
> 
> C/C++ gibt es nicht! Es gibt C und es gibt C++. Beide haben eine gewisse Schittmenge. Aber wenn du C mit C++-Programmen vergleichst ist das was grundverschiedenes. Speicherallokation mit malloc in C++ und du bekommst (in 95% der Fälle) einen übergebraten  Klassen, Vererbung, templates - das geht in C nicht/schwer. USW.

 

Nur so zum Verständniss wie ich das verstehe, ich kann doch stdio.h und auch std::cout einbinden, müßte GCC doch bestimmt schlucken.  :Cool: 

Hab mir aber überlegt eher auf der C-Schiene zu bleiben und bei String-Operationen dann eben kleinere Brötchen zu backen denn C++ hatte ich vor ~10 Jahren mal in einem zweiwöchigen Lehrgang und es sagte mir absolut nicht zu.

[edit]

 *mv wrote:*   

> Du kannst ja i.W. zunächst mal C++ wie C programmieren und nur die string-Bibliotheken benutzen. Mit der Zeit kommt dann schon mehr. Hier ist etwas zum Einlesen

 

Danke dir auch, das werde ich mal näher betrachten.

----------

## franzf

 *mv wrote:*   

> Statt beispielsweise mit C einen String oder Heap mühsam mit Zeigern zu bearbeiten oder durch expliziten Aufruf einer komplexen Bibliothek, geht so etwas mit C++ fast von selbst. Gerade bei Strings sparst Du Dir dadurch das Zeiger-Gemurkse und Memory-hin-und-her-allokieren-und-schieben.

 

Man spart sich hier das manuelle Rumschieben. Rumgeschoben werden muss das schon noch - was dann oftmals zu langsameren C++-Programmen gegenüber dem C-Pendant führt, da der C-Programmierer von Haus aus nen char name[1024]; oder was auch immer anlegt, der C++-Programmierer nur nen std::string name; und das name.reserve(1024); auslässt.

 *Quote:*   

>  *franzf wrote:*   Speicherallokation mit malloc in C++ und du bekommst (in 95% der Fälle) einen übergebraten  
> 
> Das ist so natürlich Unfug. Man kann schon sagen, dass C++ eine Obermenge von C ist.

 

Es gibt in C++ operator new, der absolut präferiert für Allokation auf dem Heap verwendet werden sollte. Wenn dann jemand kommt und für eigene Klassen erst malloc (sizeof(MyClass)); macht, um danach manuell den Konstruktor aufzurufen...

malloc macht in C++ für spezielle Sachen sicherlich Sinn (und sollte gekapselt werden, z.B. mempry_pool), aber hat in normalen Programmen eher weniger zu suchen.

----------

## mv

 *franzf wrote:*   

>  *mv wrote:*   Statt beispielsweise mit C einen String oder Heap mühsam mit Zeigern zu bearbeiten oder durch expliziten Aufruf einer komplexen Bibliothek, geht so etwas mit C++ fast von selbst. Gerade bei Strings sparst Du Dir dadurch das Zeiger-Gemurkse und Memory-hin-und-her-allokieren-und-schieben. 
> 
> Man spart sich hier das manuelle Rumschieben. Rumgeschoben werden muss das schon noch

 

Das meinte ich mit "sparst Du Dir ..."

 *Quote:*   

> was dann oftmals zu langsameren C++-Programmen gegenüber dem C-Pendant führt

 

Die Erfahrung zeigt, dass man schon ziemlich gut optimieren muss, um gegenüber der von Haus aus schon gut optimierten STL tatsächlich was rauszuholen. Natürlich ist das in speziellen Fällen möglich: Deshalb nahm ich ja auch extreme Geschwindigkeitsanforderungen aus.

 *Quote:*   

> , da der C-Programmierer von Haus aus nen char name[1024]; oder was auch immer anlegt, der C++-Programmierer nur nen std::string name; und das name.reserve(1024); auslässt.

 

Die STL-Implementierung baut auch von vornherein gewisse Puffer ein und muss nicht schon beim ersten Anhängen eines Zeichens umallokieren. Und wenn man tatsächlich die Größe vorher kennt, und Abarbeitungszeit eine wesentliche Rolle spielt, wird man wohl auch den entsprechenden reserve-Aufruf machen (bzw. gleich beim Konstruktor-Aufruf einbauen).

 *Quote:*   

>  *Quote:*    *franzf wrote:*   Speicherallokation mit malloc in C++ und du bekommst (in 95% der Fälle) einen übergebraten ;) 
> 
> Das ist so natürlich Unfug. Man kann schon sagen, dass C++ eine Obermenge von C ist. 
> 
> Es gibt in C++ operator new, der absolut präferiert für Allokation auf dem Heap verwendet werden sollte. Wenn dann jemand kommt und für eigene Klassen erst malloc (sizeof(MyClass)); macht, um danach manuell den Konstruktor aufzurufen...

 

Für Klassen kommt man ja normalerweise auch gar nicht auf die Idee, das zu machen. (Ist überhaupt ein manueller Konstruktoraufruf möglich? Dieser gibt doch normalerweise gleich ein Objekt zurück... noch niemals darüber nachgedacht, weil dafür natürlich kein Bedarf besteht).

Aber malloc kommt in C++-Programmen - gerade in solchen, die mit Parsen und "manueller" Stringverarbeitung zu tun haben - schon recht häufig vor. Ich habe noch nie gehört, dass das Bäh sei. Und gerade wenn die Aufgabe kein typisches OOP-Problem ist, finde ich es sehr normal, langen C-Code (mit mallocs und free) zu haben, und C++ nur dort einzusetzen, wo dies einen Sinn ergibt, oder wo die STL-Klassen genutzt werden sollen.

----------

## franzf

 *mv wrote:*   

> Ist überhaupt ein manueller Konstruktoraufruf möglich? Dieser gibt doch normalerweise gleich ein Objekt zurück... noch niemals darüber nachgedacht, weil dafür natürlich kein Bedarf besteht).

 

Jein. Manuell in dem Sinne von

```
Object obj;

obj.Object();
```

geht ja nicht, weshalb man schnell das "placement new" findet (~ manueller Konstruktoraufruf).

Das sieh dann z.B. so aus (schon so in etwa in freier Wildbahn gesehen  :Wink: )

```
Object* o = (Object*)malloc(sizeof(Object));

new (o) Object();
```

Man kann so auch auf die tolle Idee kommen, Objekte nur noch über ein char-Array im Speicher abzulegen (geht so auch mit dem placement new), um die langsame Allokation auf dem Heap zu umgehen.

```
char buffer[sizeof(Object)];

new (&buffer[0]) Object;

Object* o = reinterpret_cast<Object*>(buffer);
```

Urteile selbst  :Very Happy: 

 *Quote:*   

> Aber malloc kommt in C++-Programmen - gerade in solchen, die mit Parsen und "manueller" Stringverarbeitung zu tun haben - schon recht häufig vor. Ich habe noch nie gehört, dass das Bäh sei. Und gerade wenn die Aufgabe kein typisches OOP-Problem ist, finde ich es sehr normal, langen C-Code (mit mallocs und free) zu haben, und C++ nur dort einzusetzen, wo dies einen Sinn ergibt, oder wo die STL-Klassen genutzt werden sollen.

 

Ja, genau, unbedingt  :Smile: 

Wenn man mit "rohen" Zeigern rumhantieren muss, um Performance zu schinden, dann ist das sicher wahr. Das wird aber hoffentlich in eigenen Klassen gekapselt, wenn es um den Einsatz in C++-Programmen geht. Ich würde mich weigern, solche Sachen quer im Programm zu verstreuen und damit die Bugsuche zu erschweren

Aber eigentlich geht das voll am Thema vorbei  :Very Happy: 

----------

## franzf

BTT:

Wenn du mit C++ arbeiten willst und gcc in ausreichend aktueller Version installiert hast, sind da schon einige Brocken C++0x mit dabei. Das sieht u.A. eine Regex-Bibliothek vor. 

Bei meinem gcc-4.4.3 liegen diese Header bei den anderen std-c++-headern in /usr/lib64/gcc/x86_64-pc-linux-gnu/4.4.3/include/g++-v4- regex ist dabei.

Wenn du mit regulären Ausdrücken vertraut bist, könnte das vllt. die schnellste Möglichkeit sein, dein Problemchen zu lösen.

Ansonsten gibt es regex auch mit boost:

http://www.boost.org/doc/libs/1_42_0/libs/regex/doc/html/index.html

----------

## UTgamer

franzf, das ist genau das wonach ich gesucht habe.  *Quote:*   

> For example Boost.Regex can cope with wide character strings, or search and replace operations (in a manner analogous to either sed or Perl), something that traditional C libraries can not do.

 

Jetzt muß ich aber nur noch mal von ganz vorne anfangen, den bisher habe ich ich mich in C und Basic (leider keine IDE) eingearbeitet gehabt, C++ muß ich dann von ganz vorne neu beginnen. Ich begebe mich dann jetzt erst mal auf die Suche nach einem C++ Tutorial für Anfänger.

[Edit]

Tutorial: http://www.cpp-entwicklung.de/cpplinux3/cpp_main/cpp_main.html

Ich werde mir dieses mal tiefergehend durcharbeiten. Es dauert dann also nochmal Tage bis Wochen bis ich wieder an den gleichen Punkten wie im Eingangsthread stehen werde.  :Wink: 

Hauptsache ich bekomme Lösungen hin für z.B. obiges Problem und für eigene grafische Projekte mit IDEs.

----------

## franzf

Wenn du etwas mehr wissen willst, ist "Thinking in C++" von Bruce Eckel sicher ne gute Sache.

Download gibt es z.B. hier:

http://eckelbooks.starlinger.org/

Musst halt englisch können  :Smile: 

Achtung, gibt zwei Volumes, Du solltest mit Volume 1 anfangen, auf der Seite der fünfte Download.

----------

## UTgamer

Auch diese englische Anleitung werde ich mir vermerken, den mein Englisch ist ganz gut und ich verstehe alles was ich brauche.  :Smile: 

----------

## mv

Als Motivation, C oder C++ zu lernen, ist das Ganze vielleicht eine gute Idee. Wenn es Dir aber i.W. eher nur um lauffähigen Code geht, hast Du es sicher schneller in Perl geschrieben (Lernzeit für Perl eingerechnet...): Perl ist halt für solche Dinge konzipiert, und auch wenn Du mit Boost-Klassen eine mächtige Funktionalität bzgl. Regexp's bekommst, ist es damit immer noch keinesfalls so handlich wie in perl (zumindest für Standard-Aufgaben).

Wenn Du Dich auf boost verlässt, musst Du Dir auch darüber im Klaren sein, dass das auf vielen Systemen nicht installiert ist und auf jeden Fall eine riesige Abhängigkeit für ein kleines Tool darstellt.

----------

## franzf

 *mv wrote:*   

> Wenn Du Dich auf boost verlässt, musst Du Dir auch darüber im Klaren sein, dass das auf vielen Systemen nicht installiert ist und auf jeden Fall eine riesige Abhängigkeit für ein kleines Tool darstellt.

 

Deshalb hab ich auch auf std::regex (ex std::tr1::regex) hingewiesen. Baut scheinbar auf boost::regex auf und kommt mit jedem Compiler mit.

Hier ein ganz kurzer Einstieg:

http://www.johndcook.com/cpp_regex.html

Google spuckt auf der Suchen nach "std::tr1::regex" oder "std::tr1::regex doku" einige gute links aus.

----------

## mv

 *franzf wrote:*   

> Deshalb hab ich auch auf std::regex (ex std::tr1::regex) hingewiesen. Baut scheinbar auf boost::regex auf und kommt mit jedem Compiler mit.

 

Dafür würde ich die Hand nicht ins Feuer legen. Die tr1-Unterstützung variiert stark. Wenn man nicht wirklich Erweiterungen davon unbedingt braucht, würde ich da eher zu dem standardkonformen regex.h raten. Eventuell ist hier zu überlegen, ob nicht sogar die GNU-Erweiterungen 

```
info regex
```

 kompatibler sind.

----------

## UTgamer

Hört sich alles sehr interressant an besonders das regex.h, so das ich evtl. garnicht mehr auf C++ umsteigen muß?   :Rolling Eyes: 

[Edit]

Hat noch jemand Webadressen oder besser Beispiele zu regex.h?

----------

