MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

  • CPlusPlus

Contents

  1. CPlusPlus
    1. Sample app for Linux
    2. dummy1.cpp
    3. challenge.cpp
    4. hello.cpp

CPlusPlus

C++ programming language created by Bjarne Stroustrup

Sample app for Linux

   1 /*
   2 gcc test.cpp -lstdc++ -o test
   3 cpp test.cpp -o test
   4 g++ test.cpp -o test
   5 */
   6 
   7 #include<vector>
   8 #include<iostream>
   9 #include<sstream>
  10 
  11 class Teste{
  12   public:
  13     Teste(std::string xyz){
  14       std::cout << xyz << "\r\n";
  15     }
  16 };
  17 
  18 int main(){
  19   std::vector<int> listInst = std::vector<int>(); 
  20   std::cout <<"Hello world \r\n";
  21   std::ostringstream oss(std::ostringstream::out);
  22   int a = 1234;
  23   char xpto[16]="AAA BBB";
  24   oss << a << xpto << "\r\n";
  25 
  26   std::cout << oss.str();
  27   //std::ostringstream ost = std::ostringstream(ostringstream::out);
  28   Teste x1("Ola aaaaaaa");
  29   return 0;
  30 }

   1 /*
   2 To compile in gcc container
   3 g++ test.cpp -o test
   4 
   5 g++ (GCC) 8.2.0
   6 */
   7 #include<vector>
   8 #include<iostream>
   9 #include<sstream>
  10 #include<random>
  11 #include<ctime>
  12 
  13 class Teste{
  14   public:
  15     Teste(std::string xyz){
  16       std::cout << xyz << "\r\n";
  17     }
  18 };
  19 
  20 int main(){
  21   std::vector<int> listInst = std::vector<int>();
  22   std::cout <<"Hello world \r\n";
  23   std::ostringstream oss(std::ostringstream::out);
  24   int a = 1234;
  25   char xpto[16]="AAA BBB";
  26   oss << a << xpto << "\r\n";
  27 
  28   std::cout << oss.str();
  29   //std::ostringstream ost = std::ostringstream(ostringstream::out);
  30   Teste x1("Ola aaaaaaa");
  31   srand( (unsigned) time(0)  );
  32   std::cout << rand() <<"\n";
  33   std::cout << rand() <<"\n";
  34   std::cout << std::to_string(1234) << " " << std::to_string(34.56) << "\n";
  35   return 0;
  36 }

dummy1.cpp

   1 /**
   2 g++ dummy1.cpp -o dummy1
   3 */
   4 #include <iostream>
   5 #include <string>
   6 using namespace std;
   7 
   8 int main(){
   9   std::string input;
  10   std::cout <<"Hello world \r\n";
  11   cout << ">";
  12   std::cin >> input;
  13   std::cout << input << "!!!\n";
  14   char x[128];
  15   std::cout << ">";
  16   cin >> x;
  17   std::cout << x << "???\n";
  18   return 0;
  19 }

challenge.cpp

   1 /**
   2 g++ challenge.cpp -o challenge -lxml2
   3 g++ challenge.cpp -o challenge -lstdc++ -lxml2 -I/usr/include/libxml2
   4 g++ challenge.cpp -o challenge -lstdc++ -lxerces-c 
   5 // added random ...
   6 g++ challenge.cpp -o challenge -lstdc++ -lxerces-c -std=c++11
   7 indent -kr -nut challenge.cpp 
   8 */
   9 #include <iostream>
  10 #include <string>
  11 #include <typeinfo>
  12 #include <exception>
  13 #include <fstream>
  14 #include <random>
  15 #include <ctime>
  16 #include <cstdlib>
  17 #include <cstdio>
  18 #include <xercesc/util/PlatformUtils.hpp>
  19 #include <xercesc/parsers/XercesDOMParser.hpp>
  20 #include <xercesc/dom/DOM.hpp>
  21 #include <xercesc/sax/SAXParseException.hpp>
  22 #include <xercesc/sax/HandlerBase.hpp>
  23 #include <xercesc/dom/DOM.hpp>
  24 #include <xercesc/dom/DOMDocument.hpp>
  25 #include <xercesc/dom/DOMNodeList.hpp>
  26 #include <xercesc/dom/DOMNode.hpp>
  27 using namespace std;
  28 using namespace xercesc;
  29 
  30 const int NO_OPTION=-1;
  31 const int GEN_XML=1;
  32 const int GEN_JSON=2;
  33 const int EXIT=3;
  34 const char* OUT_XML="out.xml";
  35 
  36 class ErrorLoadXSDException:public exception {
  37   public:
  38     virtual const char *what() const throw() {
  39         return "Error loading XSD";
  40     }
  41 };
  42 
  43 class OutOfRangeException:public exception {
  44   public:
  45       
  46     OutOfRangeException(int value){
  47         this->value = value;  
  48         this->message = new char[128];
  49     }
  50     
  51     virtual const char *what() const throw() {
  52         char ret[128];
  53         sprintf(this->message,"%d out of range!",this->value);
  54         return this->message;
  55     }
  56     
  57   private:
  58     int value;
  59     char* message;
  60 };
  61 
  62 class Data {
  63   public:
  64       
  65       Data(){
  66           this->b = "";    
  67       }  
  68     
  69       virtual void set_string(string value) {
  70           this->b = value;
  71       } 
  72     
  73       virtual string get_string() {
  74           return this->b;
  75       }
  76 
  77       virtual string to_xml(const char* xsd_file) {
  78           string ret = "";
  79           ret += "<bit:a xmlns:bit=\"http://bitarus.allowed.org/types\" ";
  80           ret += "xsi:schemaLocation=\"http://bitarus.allowed.org/types " + string(xsd_file) + "\" ";
  81           ret += "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
  82           ret += "<bit:b>";
  83           ret += this->b;
  84           ret += "</bit:b>\n";
  85           ret += "</bit:a>\n";
  86           return ret;
  87       }
  88 
  89       virtual string to_json() {
  90           string ret = "";
  91           ret += "{\"a\": \n";
  92           ret += "  {\"b\":\"";
  93           ret += this->b;
  94           ret += "\"} \n"; 
  95           ret += "} ";  
  96           return ret;
  97       }      
  98     
  99       static Data* from_xml(const char* xml_file){
 100           Data* ret = new Data();
 101           try{
 102               XercesDOMParser *parser = new XercesDOMParser;
 103               parser->setValidationScheme(XercesDOMParser::Val_Never);
 104               parser->parse(xml_file);
 105               DOMDocument *doc = parser->getDocument();        
 106               DOMElement* root = doc->getDocumentElement();        
 107               DOMNodeList* nl = root->getElementsByTagName( XMLString::transcode("bit:b") );
 108             
 109               if(nl->getLength() > 0){ 
 110                   DOMNode* dn = nl->item(0);
 111                   string v = string(XMLString::transcode(dn->getLastChild()->getNodeValue()) );
 112                   ret->set_string(v);
 113               }            
 114           }
 115           catch(const DOMException& toCatch) {
 116               char *message = XMLString::transcode(toCatch.msg);
 117               cout << "DOMException message is:" << message << endl;
 118               XMLString::release(&message);
 119           }
 120           catch(...){
 121               cout << "Ups" << endl;
 122           }
 123         
 124           return ret;
 125     }
 126     
 127   private:
 128     string b;
 129 };
 130 
 131 class MyErrorHandler:public HandlerBase {
 132   public:
 133     void warning(const SAXParseException& exc) {
 134         throw exc;
 135     } 
 136     
 137     void error(const SAXParseException& exc) {
 138         throw exc;
 139     }
 140     
 141     void fatalError(const SAXParseException & exc) {
 142         throw exc;
 143     }
 144 
 145     void resetErrors() {
 146     }
 147 };
 148 
 149 void check_xml(const char* xsd_file, const char* out_file){
 150     XercesDOMParser *parser = new XercesDOMParser();
 151     MyErrorHandler *errorHandler = new MyErrorHandler();
 152 
 153     try {
 154         Grammar *g = parser->loadGrammar(xsd_file, Grammar::SchemaGrammarType);
 155         if (g == NULL) {
 156             throw new ErrorLoadXSDException();
 157         }
 158 
 159         parser->setErrorHandler(errorHandler);
 160         parser->setDoSchema(true);
 161         parser->setDoNamespaces(true);
 162         parser->setValidationSchemaFullChecking(true);
 163         parser->setValidationScheme(XercesDOMParser::Val_Always);
 164         parser->parse(out_file);
 165         cout << "XML is okay !" << endl;
 166     }
 167     catch(const XMLException& toCatch) {
 168         char *message = XMLString::transcode(toCatch.getMessage());
 169         cout << "XMLException message is: " << message << endl;
 170         XMLString::release(&message);
 171     }
 172     catch(const DOMException& toCatch) {
 173         char *message = XMLString::transcode(toCatch.msg);
 174         cout << "DOMException message is: " << message << endl;
 175         XMLString::release(&message);
 176     }
 177     catch(const SAXParseException& toCatch) {
 178         char *message = XMLString::transcode(toCatch.getMessage());
 179         cout << "SAXParseException message is: " << message << endl;
 180         XMLString::release(&message);
 181     }
 182     catch(const ErrorLoadXSDException* toCatch) {
 183         cout << "ErrorLoadXSDException message is: " << toCatch->what() << endl;
 184     }
 185     catch(...) {
 186         cout << "Unexpected Exception \n";
 187     }
 188 
 189     delete errorHandler;
 190     delete parser;    
 191 }
 192 
 193 void gen_xml(const char*xsd_file, const char* out_file, Data* d){
 194     int ret;
 195     cout << "XSD file " << xsd_file << endl;
 196     ofstream xml_out;
 197     xml_out.open(out_file);
 198     xml_out << d->to_xml(xsd_file) << endl;
 199     xml_out.close();
 200     cout << "Generated XML file " << out_file << endl; 
 201     check_xml(xsd_file,out_file);
 202 }
 203 
 204 void gen_json(const char* out_file, Data* d) {
 205     ofstream json_out;
 206     json_out.open(out_file);
 207     json_out << d->to_json() << endl;
 208     json_out.close();
 209     cout << "Generated JSON file " << out_file << endl; 
 210 }
 211 
 212 int menu(char* file_xsd) {
 213     cout << endl << "Using " << file_xsd << endl;
 214     std::cout << "1) Generate XML" << endl;
 215     std::cout << "2) Generate JSON" << endl;
 216     std::cout << "3) Quit" << std::endl;
 217     std::cout << ">";
 218     string option;
 219     std::cin >> option;
 220     int ret=-1;
 221     try{
 222         ret = std::stoi(option.c_str());
 223         if(ret<GEN_XML || ret >EXIT){            
 224             throw OutOfRangeException(ret);
 225         }
 226     }
 227     catch(OutOfRangeException ex){
 228         cout << ex.what() <<"\n"; 
 229     }
 230     catch(...){
 231         std::cout << "Invalid option selected!" << endl;
 232     }
 233     return ret;
 234 }
 235 
 236 int main(int argc, char** argv) {
 237     try {
 238         XMLPlatformUtils::Initialize();
 239     }
 240     catch(const XMLException& toCatch) {
 241         return 1;
 242     }
 243 
 244     if (argc == 2) {
 245         int res = NO_OPTION;
 246         while (res != EXIT) {
 247             
 248             res = menu(argv[1]);
 249             
 250             if (res == GEN_XML){
 251                 Data d = Data();
 252                 srand(time(0));
 253                 int val = rand();                
 254                 d.set_string("xml" + std::to_string(val) );
 255                 gen_xml(argv[1],OUT_XML,&d);                
 256             }
 257             
 258             if (res == GEN_JSON){
 259                 Data* d=Data::from_xml(OUT_XML);
 260                 gen_json("out.json",d);                
 261             }           
 262         }
 263     }
 264 
 265     XMLPlatformUtils::Terminate();
 266     return 0;
 267 }

hello.cpp

   1 /*
   2 g++ hello.cpp -o hello-cpp
   3 clang++  hello.cpp -o hello-cpp
   4 ./hello-cpp aaa bbb
   5 */
   6 #include<iostream>
   7 using namespace std;
   8 
   9 int main(int argc, char** argv){
  10   if(argc==2)  cout << "Hello " << argc << " " <<  argv[1] << "\n";
  11   if(argc==3)  cout << "Hello " << argc << " " << argv[1] << " " << argv[2] << "\n";
  12 }
  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01