|
|
C 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 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 |
#include "AsciiEditor.h" #include <fstream> #include <iostream> #include <vector> #include <string> #include <iterator> class Editor { public: typedef std::vector<std::string> linevector; //Textdatei einelesen void einlesen() { std::ifstream ifs("C:/asci1.txt"); std::string tmp; linevector::iterator li; //LineIterator while(getline(ifs, tmp)) { lv.push_back(tmp); tmp = std::string(); } } //Bestimmte Zeilen ansehen void viewline() { typedef std::vector<int> intvector; intvector intv; intvector::const_iterator inti; std::cout<<"Welche Zeilen sollen ausgegeebn werden?: \n\n"; int eingabe; while (std::cin >> eingabe && eingabe != 999 ) { intv.push_back(eingabe); } linevector::iterator li; for (inti=intv.begin(); inti!=intv.end(); inti++) { li = lv.begin() + *inti; //li LineIterator, lv Linevector von außen std::cout << *li << std::endl; } } //Bestimmte Zeilen entfernen void removeline() { typedef std::vector<int> intvector; intvector intv; intvector::const_iterator inti; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; int eingabe; while (std::cin >> eingabe && eingabe != 999 ) { intv.push_back(eingabe); } linevector::iterator li; for (inti=intv.begin(); inti!=intv.end(); inti++) { li = lv.begin() + *inti; //li LineIterator, lv Linevector von außen lv.erase(li); } for (li=lv.begin(); li!=lv.end(); li++) { std::cout << *li << std::endl; } } //Zeilen hinzufügen void addline() { std::cout<<"Zeilen hinzufuegen: \n\n"; std::string eingabe; std::string tmp; while(getline(std::cin >> eingabe, tmp)&& eingabe != "end!") { lv.push_back(tmp); //lv Linevector von außen tmp = std::string(); } linevector::iterator li; for (li=lv.begin(); li!=lv.end(); li++) { std::cout << *li << std::endl; //li LineIterator, lv Linevector von außen } } private: linevector lv; //Linevector }; int main(){ Editor edit; edit.einlesen(); edit.viewline(); edit.removeline(); edit.addline(); return 0; } |
|
|
C 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 |
//Bestimmte Zeilen entfernen void removeline() { typedef std::set<int> index_set; index_set indexes; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; int eingabe; while (std::cin >> eingabe && eingabe != 999 ) indexes.insert(eingabe); linevector::iterator li; index_set::const_reverse_iterator idx_rit; for (idx_rit=indexes.rbegin(); idx_rit!=indexes.rend(); ++idx_rit) { li = lv.begin() + *idx_rit; //li LineIterator, lv Linevector von außen lv.erase(li); } std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } //Zeilen hinzufügen void addline() { std::cout<<"Zeilen hinzufuegen: \n\n"; std::string eingabe; while(std::getline(std::cin,eingabe)&& eingabe != "end!") lv.push_back(eingabe); //lv Linevector von außen std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } |
ehe gerade dass du noch mehr Fragen hattest....naja,morgen ist ja auch noch nen Tag
:wink: 

Woran liegt? Und wie kann ich Enter als Abbruchbedingung festlegen? Hab schon mit /n rumprobiert..|
|
C 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 |
//Bestimmte Zeilen entfernen void removeline() { typedef std::set<int> index_set; index_set indexes; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; int eingabe; const unsigned int lvsize = lv.size(); while (std::cin >> eingabe && eingabe != 999 ){ if (eingabe > lvsize) { std::cout<< eingabe << " liegt ausserhalb des Bildes "; } indexes.insert(eingabe); linevector::iterator li; index_set::const_reverse_iterator idx_rit; for (idx_rit=indexes.rbegin(); idx_rit!=indexes.rend(); ++idx_rit) { li = lv.begin() + *idx_rit; //li LineIterator, lv Linevector von außen lv.erase(li); } } std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } |
|
|
C 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 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 |
#include <fstream> #include <iostream> #include <vector> #include <string> #include <iterator> #include <set> #include <sstream> class Editor { public: typedef std::vector<std::string> linevector; //Textdatei einelesen void einlesen() { std::ifstream ifs("C:/asci1.txt"); std::string tmp; linevector::iterator li; //LineIterator while(getline(ifs, tmp)) { lv.push_back(tmp); tmp = std::string(); } } //Bestimmte Zeilen ansehen void viewline() { typedef std::vector<size_t> intvector; intvector intv; intvector::const_iterator inti; std::cout<<"Welche Zeilen sollen ausgegeebn werden?: \n\n"; get_indexes(intv); linevector::iterator li; for (inti=intv.begin(); inti!=intv.end(); inti++) { li = lv.begin() + *inti; //li LineIterator, lv Linevector von außen std::cout << *li << std::endl; } } //Bestimmte Zeilen entfernen void removeline() { typedef std::set<size_t> index_set; index_set indexes; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; while (get_indexes(indexes,true)); linevector::iterator li; index_set::const_reverse_iterator idx_rit; for (idx_rit=indexes.rbegin(); idx_rit!=indexes.rend(); ++idx_rit) { li = lv.begin() + *idx_rit; //li LineIterator, lv Linevector von außen lv.erase(li); } std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } //Zeilen hinzufügen void addline() { std::cout<<"Zeilen hinzufuegen: \n\n"; std::string eingabe; std::cin.ignore(std::cin.rdbuf()->in_avail()); do { std::getline(std::cin,eingabe); if(eingabe!="") lv.push_back(eingabe); //lv Linevector von außen else break; }while(std::cin.good()); std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } private: linevector lv; //Linevector //Hilfsfunktion template<class container_type> bool get_indexes(container_type& int_container,bool single_values = false) { std::string str; std::getline(std::cin,str); if(str =="") return false; else { container_type::value_type tmp; std::istringstream isstr(str); if(!single_values) { do { isstr>>tmp; if(isstr && tmp<lv.size()) int_container.insert(int_container.end(),tmp); else return false; }while(isstr); } else { isstr>>tmp; if(isstr && tmp<lv.size()) int_container.insert(int_container.end(),tmp); else return false; } return true; } } }; int main(){ Editor edit; edit.einlesen(); edit.viewline(); edit.removeline(); edit.addline(); return 0; } |
bin am studieren... also die eingaben sollen mit enter abgeschlossen werden.. außer bei addline()... da am besten durch ein wort oder so.. aber dass bekomme ich auch hin... nur templates hatten wir noch nicht.. ich gucke ob ichs trotzdem verstehe...
)
).. Hauptsache es läuft fehlerfrei...|
|
C 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 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 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
#include "AsciiEditor.h" #include <fstream> #include <iostream> #include <vector> #include <string> #include <iterator> #include <set> class Editor { public: typedef std::vector<std::string> linevector; typedef std::set<int> stringset; unsigned int col; //Textdatei einelesen void einlesen() { /*Hier fehlt noch manuelle Angabe des Pfads oder Beispieldatei Auswahl: 1 -> pfad (ifs(pfad) oder 2 Beispiel-Datei*/ std::cout <<"Ascii-Bild waehlen: Pfad angeben (1) oder Beispiel(2)"; /* klappt leider nicht int wahl; std::cin >> wahl; if (wahl == 2){std::ifstream ifs("C:/asci1.txt");} if (wahl == 1){/*anuelle Pfadangabe} {std::cout << "Keine gueltige Auswahl";} */ std::ifstream ifs("C:/asci1.txt"); std::string tmp; linevector::iterator li; //LineIterator stringset maxstring; while(getline(ifs, tmp)) { maxstring.insert(tmp.size()); lv.push_back(tmp); tmp = std::string(); } stringset::const_reverse_iterator aa; aa = maxstring.rbegin(); col = *aa; for (li=lv.begin(); li!=lv.end(); li++) { std::cout << *li << std::endl; } } //Bestimmte Zeilen ansehen //Statt 999 besser "Enter" als Abbruchbedinung void viewline() { typedef std::vector<int> intvector; intvector intv; intvector::const_iterator inti; std::cout<<"Welche Zeilen sollen ausgegeebn werden?: \n\n"; int eingabe; while (std::cin >> eingabe && eingabe != 999) { intv.push_back(eingabe); } linevector::iterator li; for (inti=intv.begin(); inti!=intv.end(); inti++) { li = lv.begin() + *inti; //li LineIterator, lv Linevector von außen std::cout << *li << std::endl; } } //Bestimmte Zeilen entfernen //Statt 999 besser "Enter" als Abbruchbedinung void removeline() { typedef std::set<int> index_set; index_set indexes; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; int eingabe; const unsigned int lvsize = lv.size(); while (std::cin >> eingabe && eingabe != 999 ){ if (eingabe > lvsize) { std::cout<< eingabe << " liegt ausserhalb des Bildes "; } indexes.insert(eingabe); linevector::iterator li; index_set::const_reverse_iterator idx_rit; for (idx_rit=indexes.rbegin(); idx_rit!=indexes.rend(); ++idx_rit) { li = lv.begin() + *idx_rit; //li LineIterator, lv Linevector von außen lv.erase(li); } } std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } //Zeilen hinzufügen //Problem: Fügt das erste Wort eine Zeile nicht ein void addline() { std::cout<<"Zeilen hinzufuegen: \n\n"; std::string eingabe; std::string tmp; while(getline(std::cin >> eingabe, tmp)&& eingabe != "end!") { if(eingabe.size() > col) { std::cout << "Zeile muss kleiner als " << col << " sein!"; break; } lv.push_back(tmp); //lv Linevector von außen tmp = std::string(); } linevector::iterator li; for (li=lv.begin(); li!=lv.end(); li++) { std::cout << *li << std::endl; //li LineIterator, lv Linevector von außen } } //Rahmen zeigen -> OK void showline() { std::cout << "Symbol fuer Rahmen angeben: "; char symbol; std::cin >> symbol; std::string empty(col, ' '); std::string full(col + 4, symbol); std::cout << full << std::endl; std::cout << symbol << ' ' << empty << ' '<< symbol << std::endl; linevector::iterator li; for (li=lv.begin(); li!=lv.end(); ++li) { std::string max = *li; if(max.size() == col){ std::cout << symbol << " " << *li << " " << symbol << std::endl; } else{ unsigned int dif = col - max.size(); std::string fill(dif, ' '); std::cout << symbol << " " << *li << fill << " " << symbol; } } std::cout << "\n" << symbol << ' ' << empty << ' '<< symbol << std::endl; std::cout << full << std::endl; } //Infos anzeigen lassen -> OK void infoline() { std::cout << "\nDas Ascii-Bild hat " << lv.size() <<" Zeilen und maximal " << col << " Spalten (ohne Rahmen).\n"; } private: linevector lv; //Linevector stringset maxstring; }; int main(){ /*Sollte nur einmal edit.einlesen aufrufen, aber durch den main()-Aurufen weiter unten wird sie auch immer wieder neu geladen, ich weiß nicht wie ich die anderen Funktionen speriert aufrufen kann*/ /*Sollte noch eine Exit-Funktion bzw. neues AsciiLaden-Funktion bekommen*/ Editor edit; edit.einlesen(); std::cout<<"\nWas wollen sie machen?\n"<< "Zeilen ansehen (1)?\nZeilen hinzufuegen (2)?\nZeilen entfernen (3)?\nZeileninfos anzeigen (4)?\nRahmen gestalten (5)\n\n"; int wahl; std::cin >> wahl; switch(wahl) { case 1:edit.viewline();break; case 3:edit.removeline();break; case 2:edit.addline();break; case 5:edit.showline();break; case 4:edit.infoline();break; default: std::cout << "Zahl nicht guelting\n"; } main(); return 0; } |
|
|
C 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 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 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
#include <fstream> #include <iostream> #include <vector> #include <string> #include <iterator> #include <set> #include <sstream> #include <algorithm> class Editor { public: Editor():col(0){} typedef std::vector<std::string> linevector; typedef std::set<int> stringset; //Textdatei einelesen void einlesen() { std::cout <<"Ascii-Bild waehlen: Pfad angeben (1) oder Beispiel(2)"; std::ifstream ifs; int wahl; std::cin >> wahl; if (wahl == 2){ifs.open("C:/asci1.txt");} else if (wahl == 1) { std::string temp_path; std::cout<<"Bitte den Pfad eingeben:"; std::cin.ignore(std::cin.rdbuf()->in_avail()); std::getline(std::cin,temp_path); ifs.open(temp_path.c_str()); if(!ifs) { std::cout<<"Datei konnte nicht geoeffnet werden.\nProgramm wird beendet."<<std::endl; exit(-1); } } else {std::cout << "Keine gueltige Auswahl";exit(-1);} std::string tmp; linevector::iterator li; //LineIterator while(getline(ifs, tmp)) { col = (tmp.size()>col)?tmp.size():col; lv.push_back(tmp); } for (li=lv.begin(); li!=lv.end(); li++) { std::cout << *li << std::endl; } } //Bestimmte Zeilen ansehen void viewline() { std::vector<size_t> intv; std::vector<size_t>::const_iterator inti; std::cout<<"Welche Zeilen sollen ausgegeebn werden?: \n\n"; get_indexes(intv); linevector::iterator li; for (inti=intv.begin(); inti!=intv.end(); inti++) { li = lv.begin() + *inti; //li LineIterator, lv Linevector von außen std::cout << *li << std::endl; } } //Bestimmte Zeilen entfernen void removeline() { std::vector<size_t> indexes; std::cout<<"Welche Zeilen sollen geloescht werden?: \n\n"; get_indexes(indexes); std::sort(indexes.begin(),indexes.end()); linevector::iterator li; std::vector<size_t>::const_reverse_iterator idx_rit; for (idx_rit=indexes.rbegin(); idx_rit!=indexes.rend(); ++idx_rit) { li = lv.begin() + *idx_rit; //li LineIterator, lv Linevector von außen lv.erase(li); } std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } //Zeilen hinzufügen void addline() { std::cout<<"Zeilen hinzufuegen: \n\n"; std::string eingabe; std::cin.ignore(std::cin.rdbuf()->in_avail()); do { std::getline(std::cin,eingabe); if(eingabe!="!end") { if(eingabe.size() > col) { //Waere es hier nicht sinnvoller col neu zu setzen? std::cout << "Zeile muss kleiner als " << col << " sein!"<<std::endl; break; } lv.push_back(eingabe); //lv Linevector von außen } else break; }while(std::cin.good()); std::copy(lv.begin(),lv.end(),std::ostream_iterator<std::string>(std::cout,"\n")); } //Rahmen zeigen -> OK void showline() { std::cout << "Symbol fuer Rahmen angeben: "; char symbol; std::cin >> symbol; std::string empty(col, ' '); std::string full(col + 4, symbol); std::cout << full << std::endl; std::cout << symbol << ' ' << empty << ' '<< symbol << std::endl; linevector::iterator li; for (li=lv.begin(); li!=lv.end(); ++li) { std::string max = *li; if(max.size() == col) std::cout << symbol << " " << *li << " " << symbol << std::endl; else { size_t dif = col - max.size(); std::string fill(dif, ' '); std::cout << symbol << " " << *li << fill << " " << symbol<<std::endl; } } std::cout << symbol << ' ' << empty << ' '<< symbol << std::endl; std::cout << full << std::endl; } //Infos anzeigen lassen -> OK void infoline() { std::cout << "\nDas Ascii-Bild hat " << lv.size() <<" Zeilen und maximal " << col << " Spalten (ohne Rahmen).\n"; } private: size_t col; linevector lv; //Hilfsfunktion bool get_indexes(std::vector<size_t>& index_vec,bool single_values = false) { std::string str; std::cin.ignore(std::cin.rdbuf()->in_avail()); std::getline(std::cin,str); if(str =="") return false; else { size_t tmp; std::istringstream isstr(str); if(!single_values) { do { isstr>>tmp; if(isstr && tmp<lv.size()) index_vec.push_back(tmp); else return false; }while(isstr); } else { isstr>>tmp; if(isstr && tmp<lv.size()) index_vec.push_back(tmp); else return false; } return true; } } }; int main() { char d; do { Editor edit; edit.einlesen(); int wahl=0; do { std::cout<<"\nWas wollen sie machen?\n"<< "Zeilen ansehen (1)?\nZeilen hinzufuegen (2)?\nZeilen entfernen (3)?\nZeileninfos anzeigen (4)?\nRahmen gestalten (5)\nEnde(6)\n\n"; std::cin >> wahl; switch(wahl) { case 1:edit.viewline();break; case 2:edit.addline();break; case 3:edit.removeline();break; case 4:edit.infoline();break; case 5:edit.showline();break; case 6:std::cout<<"Auf Wiedersehen"<<std::endl;break; default: std::cout << "Zahl nicht guelting\n"; } } while(wahl != 6); std::cout<<"Neue Datei bearbeiten (j/n)? :"; std::cin>>d; }while(d!= 'n' && d!='N'); return 0; } |
|
|
C 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 |
//global bool greater_string(const std::string& str1,const std::string& str2) { return str1.size()<str2.size(); }; ........ void showline() { col = std::max_element(lv.begin(),lv.end(),greater_string)->size(); std::cout << "Symbol fuer Rahmen angeben: "; char symbol; std::cin >> symbol; std::string empty(col, ' '); std::string full(col + 4, symbol); std::cout << full << std::endl; std::cout << symbol << ' ' << empty << ' '<< symbol << std::endl; linevector::iterator li; for (li=lv.begin(); li!=lv.end(); ++li) { std::string max = *li; if(max.size() == col) std::cout << symbol << " " << *li << " " << symbol << std::endl; else { size_t dif = col - max.size(); std::string fill(dif, ' '); std::cout << symbol << " " << *li << fill << " " << symbol<<std::endl; } } std::cout << symbol << ' ' << empty << ' '<< symbol << std::endl; std::cout << full << std::endl; } |