Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
#include <fstream> #include <iostream> #include <string> #include <map> #include <vector> class CStringToSmileyConverter { public: bool InitFont(std::string Filename, int Size); bool InitSmileys(std::string Filename); void Convert(std::string Text); bool Save(std::string Filename); ~CStringToSmileyConverter(); private: std::map<char, std::string*> Characters; // Die Schriftart std::map<char, std::string> Smileys; // Die Smileys, bsp: x enstspricht :lol: std::string ToConvert; int FontSize; }; CStringToSmileyConverter::~CStringToSmileyConverter() { for(std::map<char, std::string*>::iterator it = Characters.begin(); it != Characters.end(); it++) delete[] it->second; } bool CStringToSmileyConverter::InitFont(std::string Filename, int Size) { FontSize = Size; std::fstream FontData(Filename.c_str(), std::ios::in); if(!FontData.good()) return false; // Die Schriftgröße entspricht der Anzahl der Zeilen pro Zeichen std::string DataLine; char LineCharacter; // Zu welchem Zeichen gehört die Zeile // Zuerst kommt das Zeichen, dann das entsprechende Smileybild (Größe ist die Schriftgröße) // Für ein Zeichen werden also insgesamt Schriftgröße+1 Zeilen gebraucht for(int Counter=1; std::getline(FontData, DataLine); Counter++) { if(DataLine[0] == '#' && DataLine[1] == '#') // Zeile auslassen (Kommentar { Counter--; continue; } if(Counter % (FontSize + 1) == 1) // Jede Schriftgröße+1. Linie beinhaltet das Zeichen als Buchstabe { Characters[DataLine[0]] = new std::string[FontSize]; LineCharacter = DataLine[0]; } else // Die Zeile beinhaltet einen Teil des Symbols { if(Counter % (FontSize + 1) == 0) Characters[LineCharacter][FontSize-1] = DataLine; else Characters[LineCharacter][Counter % (FontSize + 1) - 2] = DataLine; } } return true; } bool CStringToSmileyConverter::InitSmileys(std::string Filename) { std::fstream SmileyData(Filename.c_str(), std::ios::in); if(!SmileyData.good()) return false; std::string SmileyInput; std::string SmileyOutput; for(; std::getline(SmileyData, SmileyInput);) { if(SmileyInput[0] == '#' && SmileyInput[1] == '#') // Zeile auslassen (Kommentar) continue; std::getline(SmileyData, SmileyOutput); Smileys[SmileyInput[0]] = SmileyOutput; } return true; } void CStringToSmileyConverter::Convert(std::string Text) { ToConvert = Text; } bool CStringToSmileyConverter::Save(std::string Filename) { std::fstream Output(Filename.c_str(), std::ios::out); if(!Output.good()) return false; for(int Row=0; Row<FontSize; Row++) { for(int ToConvertCharacter=0; ToConvertCharacter<ToConvert.length(); ToConvertCharacter++) { for(int OutputSmileyCharacter=0; OutputSmileyCharacter<Characters[ToConvert[ToConvertCharacter]][Row].length(); OutputSmileyCharacter++) { Output << Smileys[Characters[ToConvert[ToConvertCharacter]][Row][OutputSmileyCharacter]]; } } Output << "\n"; } return true; } int main() { std::fstream Input("input.txt", std::ios::in); if(!Input.good()) std::cout << "Fehler beim Oeffnen der Input-Datei!" << std::endl; std::string Text; std::getline(Input, Text); CStringToSmileyConverter con; if(!con.InitFont("font.txt", 10)) std::cout << "Fehler beim Laden der Schriftart!" << std::endl; if(!con.InitSmileys("smileys.txt")) std::cout << "Fehler beim Laden der Smileys!" << std::endl; con.Convert(Text); if(!con.Save("output.txt")) std::cout << "Fehler beim Speichern." << std::endl; } |
Anonymous
unregistriert
Zitat
Zugegeben, bei der Speichern-Funktion hatte ich selbst nichtmehr so richtig den Durchblick Embarassed
Zitat
Warum, wo hakts?
C-/C++-Quelltext |
|
1 |
Output << Smileys[Characters[ToConvert[ToConvertCharacter]][Row][OutputSmileyCharacter]]; |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// \file: main.cpp // ########################################################################### // \created: 09.01.2009 // \author: Patrick Ullmann // \purpose: Hauptdatei. // ########################################################################### // \changes: // // 1 09.01.2009/Patrick Ullmann // Datei erstellt. // ########################################################################### // I N C L U D E S ########################################################### #include <iostream> #include "string_to_smiley.hpp" // F U N K T I O N E N ####################################################### // /////////////////////////////////////////////////////////////////////////// // LOCAL // // Programmeinsprungspunkt. // // \result: Exit-Code. // /////////////////////////////////////////////////////////////////////////// int main (void) { try { string_to_smiley sts ("character.txt", "font.txt"); sts.save_string ("Hi!", "output.txt"); } catch (const std::exception& exception) { std::cout << exception.what () << std::endl; return -1; } return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
// \file: string_to_smiley.hpp // ########################################################################### // \created: 09.01.2009 // \author: Patrick Ullmann // \purpose: Klasse für das Konvertieren von einem String zu Smiley-Text. // ########################################################################### // \changes: // // 1 09.01.2009/Patrick Ullmann // Datei erstellt. // ########################################################################### #if !defined (string_to_smiley_hpp_included) #define string_to_smiley_hpp_included #if defined (_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif // I N C L U D E S ########################################################### #include <exception> #include <fstream> #include <string> #include <map> #include <vector> // L I N K E R ############################################################### // TODO: <insert libraries> // M A K R O S ############################################################### // TODO: <insert makros> // D E F I N I T I O N E N ################################################### // TODO: <insert definitions> // F U N K T I O N E N ####################################################### // TODO: <insert functions> // S T R U K T U R E N ####################################################### class string_to_smiley { public: // Constructor, Copy-Constructor und Destructor. string_to_smiley (void); string_to_smiley (const std::string& character_filename, const std::string& font_filename); string_to_smiley (std::istream& character_stream, std::istream& font_stream); string_to_smiley (const string_to_smiley& other); ~string_to_smiley (void); // Laden von Zeichendaten über den Dateinamen. void load_character (const std::string& filename); // Laden von Zeichendaten über einen Stream. void load_character (std::istream& stream); // Laden einer Font über den Dateinamen. void load_font (const std::string& filename); // Laden einer Font über einen Stream. void load_font (std::istream& stream); // Speichert einen String konvertiert in eine Datei. void save_string (const std::string& string, const std::string& filename); // Speichert einen String konvertiert in einen Output-Stream. void save_string (const std::string& string, std::ostream& stream); // assignment-operator: = string_to_smiley string_to_smiley& operator = (const string_to_smiley& other); protected: private: // Sicherung der Smilies für die Zeichen. std::map<char, std::string> character_data_; // Sicherung der Zeichen-Daten. std::map<char, std::vector<std::string> > font_data_; }; #endif |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
// \file: string_to_smiley.cpp // ########################################################################### // \created: 09.01.2009 // \author: Patrick Ullmann // \purpose: Klasse für das Konvertieren von einem String zu Smiley-Text. // ########################################################################### // \changes: // // 1 09.01.2009/Patrick Ullmann // Datei erstellt. // ########################################################################### // I N C L U D E S ########################################################### #include "string_to_smiley.hpp" // F U N K T I O N E N ####################################################### // /////////////////////////////////////////////////////////////////////////// // PUBLIC Constructor // // /////////////////////////////////////////////////////////////////////////// string_to_smiley::string_to_smiley (void) { } // /////////////////////////////////////////////////////////////////////////// // PUBLIC Constructor // // \param character_filename: Pfad zur Character-Datei. // \param font_filename: Pfad zur Font-Datei. // /////////////////////////////////////////////////////////////////////////// string_to_smiley::string_to_smiley (const std::string& character_filename, const std::string& font_filename) { load_character (character_filename); load_font (font_filename); } // /////////////////////////////////////////////////////////////////////////// // PUBLIC Constructor // // \param character_stream: Input-Stream zu den Character-Daten. // \param font_stream: Input-Stream zu den Font-Daten. // /////////////////////////////////////////////////////////////////////////// string_to_smiley::string_to_smiley (std::istream& character_stream, std::istream& font_stream) { load_character (character_stream); load_font (font_stream); } // /////////////////////////////////////////////////////////////////////////// // PUBLIC Copy-Constructor // // \param other: Referenz zu einer Instanz von string_to_smiley. // /////////////////////////////////////////////////////////////////////////// string_to_smiley::string_to_smiley (const string_to_smiley& other) : character_data_ (other.character_data_), font_data_ (other.font_data_) { } // /////////////////////////////////////////////////////////////////////////// // PUBLIC Destructor // // /////////////////////////////////////////////////////////////////////////// string_to_smiley::~string_to_smiley (void) { } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Laden von Zeichendaten über den Dateinamen. // // \param filename: Pfad zur Character-Datei. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::load_character (const std::string& filename) { load_character (std::ifstream (filename.c_str ())); } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Laden von Zeichendaten über einen Stream. // // \param stream: Input-Stream zu den Character-Daten. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::load_character (std::istream& stream) { if (!stream.good ()) throw std::runtime_error (__FUNCTION__ + std::string (": invalid input stream.")); for (std::string line; std::getline (stream, line); ) { if (line.empty () || line.size () < 2) continue; character_data_[line.at (0)] = line.substr (1); } } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Laden einer Font über den Dateinamen. // // \param filename: Pfad zur Font-Datei. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::load_font (const std::string& filename) { load_font (std::ifstream (filename.c_str ())); } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Laden einer Font über einen Stream. // // \param stream: Input-Stream zu den Font-Daten. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::load_font (std::istream& stream) { if (!stream.good ()) throw std::runtime_error (__FUNCTION__ + std::string (": invalid input stream.")); for (std::string line, character; std::getline (stream, line); ) { if (line.empty ()) continue; // Zeichenwechsel. if (line.size () > 2 && line.substr (0, 2) == "//") { character = line.substr (2, 1); continue; } if (character.empty ()) continue; font_data_[character.at (0)].push_back (line); } for (std::map<char, std::vector<std::string> >::iterator it = font_data_.begin (); it != font_data_.end (); ++it) { if ((*it).second.size () != 12) throw std::logic_error (__FUNCTION__ + std::string (": size of character '") + (*it).first + "' is invalid."); } } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Speichert einen String konvertiert in eine Datei. // // \param string: String der konvertiert und gespeichert werden soll. // \param filename: Pfad zur Ausgabe-Datei. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::save_string (const std::string& string, const std::string& filename) { save_string (string, std::ofstream (filename.c_str ())); } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // Speichert einen String konvertiert in einen Output-Stream. // // \param string: String der konvertiert und gespeichert werden soll. // \param stream: Output-Stream für die Ausgabe. // /////////////////////////////////////////////////////////////////////////// void string_to_smiley::save_string (const std::string& string, std::ostream& stream) { if (!stream.good ()) throw std::runtime_error (__FUNCTION__ + std::string (": invalid output stream.")); for (unsigned int i = 0; i < 12; ++i) { for (std::string::const_iterator it1 = string.begin (); it1 != string.end (); ++it1) { std::string character = character_data_[(*it1)]; std::vector<std::string> font = font_data_[(*it1)]; for (std::string::iterator it2 = font[i].begin (); it2 != font[i].end (); ++it2) stream << character_data_[(*it2)]; } stream << std::endl; } } // /////////////////////////////////////////////////////////////////////////// // PUBLIC // // assignment-operator: = string_to_smiley // // \param other: Referenz zu einer Instanz von string_to_smiley. // \result: Referenz auf diese Instanz. // /////////////////////////////////////////////////////////////////////////// string_to_smiley& string_to_smiley::operator = (const string_to_smiley& other) { character_data_ = other.character_data_; font_data_ = other.font_data_; return (*this); } |
Quellcode |
|
1 2 |
x:!: 0:oops: |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//H 00000000 0xx00xx0 0xx00xx0 0xx00xx0 0xx00xx0 0xxxxxx0 0xxxxxx0 0xx00xx0 0xx00xx0 0xx00xx0 00000000 00000000 //i 0000 0000 0xx0 0xx0 0000 0xx0 0xx0 0xx0 0xx0 0xx0 0000 0000 //! 0000 0xx0 0xx0 0xx0 0xx0 0xx0 0000 0000 0xx0 0xx0 0000 0000 |
Anonymous
unregistriert
Anonymous
unregistriert
Zitat von »"defaultplayer"«
Hmm, ein stringvector ist wirklich besser geeignet als ein string*.
Naja, bei mir kann man dafür die Größe frei wählen
Zitat
Kann man das bei einem vector nicht?!
Werbeanzeige