Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 3. Sonntagsrätsel

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 ] > 2 <
010
01.09.2002, 22:07 Uhr
ChrisMa




Zitat:
virtual postete
@cristian
Dein Programm hat auf jeden Fall schon mal einige Stilpunkte gewonnen, weil gut kommentiert.


Danke für die Blumen ;-)


Zitat:
virtual posteteÜbrigens: Grüße aus Bonn, auch von mir

Es ist immer wieder erstaunlich wie klein die Welt ist
Gruß zurück..
--
Gruß,
Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.06.2004, 19:08 Uhr
0xdeadbeef
Gott
(Operator)


Vielleicht ein bisschen spät, aber ein anderer Thread hat diese Aufgabe in mein Bewusstsein gerückt, und weils hier eigentlich besser hinpasst - hier meine Lösung unter Verwendung von boost:

C++:

#include <fstream>
#include <iostream>
#include <iterator>
#include <string>

#include <boost/spirit/core.hpp>
#include <boost/spirit/utility/confix.hpp>
#include <boost/spirit/utility/escape_char.hpp>

using namespace boost::spirit;

template<typename _t> class put_to_stream_a {
  std::ostream &os;
public:
  put_to_stream_a(std::ostream &o) : os(o) {}

  void operator()(_t data) const {
    os << data << std::flush;
  }

  void operator()(const _t* b, const _t* e) const {
    std::copy(b, e, std::ostream_iterator<char>(os, ""));
  }
};

int main(int argc, char *argv[]) {
  std::ifstream fin(argv[1]);
  std::string s;
  put_to_stream_a<char> to_cout(std::cout);

  while(fin) s += fin.get();
  parse(s.c_str(),
        *(confix_p('"', *c_escape_ch_p, '"')[to_cout] |
          comment_p("/*", "*/")                       |
          comment_p("//")                             |
          anychar_p[to_cout]),
        nothing_p);
  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
18.06.2004, 19:57 Uhr
0xdeadbeef
Gott
(Operator)


Ha! Einen hab ich noch oben drauf:

C++:

#include <iostream>
#include <string>

#include <boost/spirit/core.hpp>
#include <boost/spirit/utility/confix.hpp>
#include <boost/spirit/utility/escape_char.hpp>

void char_to_cout(char c) { std::cout.put(c); }
void seq_to_cout(const char *b, const char *e) { while(b != e) std::cout.put(*b++); }

int main() {
  std::string s;

  while(std::cin) s += fin.get();
  boost::spirit::parse(s.c_str(),
                       *(boost::spirit::confix_p('"', *boost::spirit::c_escape_ch_p, '"')[&seq_to_cout] |
                         boost::spirit::comment_p("/*", "*/")                                           |
                         boost::spirit::comment_p("//")                                                 |
                         boost::spirit::anychar_p[&char_to_cout]));
}


5 Semikolons, 5 Kommas. Liest von stdin. Ich schätze, kürzer wirds nicht - hab ich jetzt gewonnen? Whitespaces rausgenommen gibt das 564 Zeichen - das ist schon fast C-Golf...

Wenn ich namespaces und kürzere Namen benutze, komm ich auf 445 Zeichen. Wobei...wenn ich mich recht entsinne, hatten wir für Golf

C++:
#include <iostream>
using namespace std;


schon vorausgesetzt - dann sind es 404:

C++:

#include <string>
#include <boost/spirit/core.hpp>
#include <boost/spirit/utility/confix.hpp>
#include <boost/spirit/utility/escape_char.hpp>
using namespace boost::spirit;void x(char c){cout<<c;}void y(const char*b,const char*e){while(b-e)cout<<*b++;}int main(){string s;
while(cin)s+=cin.get();parse(s.c_str(),*(confix_p('"',*c_escape_ch_p,'"')[&y]|comment_p("/*","*/")|comment_p("//")|anychar_p[&x]));}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 18.06.2004 um 21:01 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.06.2004, 21:17 Uhr
virtual
Sexiest Bit alive
(Operator)


Nee, mit dieser Strategie kann ich ja behaupten:

C++:
#include "virtual/comment-remover.h"
int main()
{
    remove_comment<virtual::CPPSOURCE>(std::cin,std::cout);
}


Noch eine kleine anmerkung: Nicht systemheader (die von Boost gehören dazu) sind mit "" an stelle von <> zu inkludieren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
18.06.2004, 21:20 Uhr
0xdeadbeef
Gott
(Operator)


Ich finde, boost sollte da einen Sonderstatus haben...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
18.06.2004, 21:57 Uhr
0xdeadbeef
Gott
(Operator)


Was den Code angeht, ich hätts mir dann gleich so gebastelt, dass ein

C++:
#include "x"


Den Erfolg bringt. Im übrigen ist meine Lösung laut https://ssl.secure-hosts.de/www.fun-soft.de/showtopic.php?threadid=7778 die einzige, die wirklich funktioniert...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Rätselecke ]  


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: