Tämä erittäin eliitti ohjelma muuntaa antamasi tekstin merkkigrafiikaksi.
Eräs hyvä käyttötapa tälle on raiskata irkkaajien hermot ja läiskästä esim. irssillä tämmöistä: /exec -o TAG moij! ;)
/////////////////////////////////////////////////
// TAG - Teksti ASCII-Grafiikaksi //
// Muuntaa normaalin tekstin ASCII-Grafiikaksi //
// //
// - Matti "MasaVista" Kaijomaa 2005 //
/////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main(int argc, char *argv[]) {
string teksti;
//Jos muunnettava teksti annetaan parametreinä, muutetaan ne yhtenäiseksi stringiksi
if (argv[1]) {
int a = 1;
while (argv[a]) {
for (int i = 0; i < strlen(argv[a]); i++) {
teksti += argv[a][i];
}
a++;
if (argv[a]) teksti += ' ';
}
}
//Jos tekstiä ei anneta parametrinä, pyydetään se nyt
else {
cout << "TAG - Teksti ASCII-Grafiikaksi" << endl << "Anna muunnettava teksti: ";
getline(cin, teksti);
}
//Muutetaan stringi luvuiksi, joiden perusteella haetaan oikeat merkit merkistöstä
int merkit[teksti.size()];
for (int i = 0; i < teksti.size(); i++) {
//Jos merkit ovat jo numeroita, ei niitä kannata muuttaa uudestaan numeroiksi
if (isdigit(teksti[i])) {
merkit[i] = teksti[i] - '0';
}
else {
//Jos merkit ovat "normaaleja" kirjaimia, käytetään niiden ASCII-arvoa hyödyksi
if (isalpha(teksti[i])) {
teksti[i] = toupper(teksti[i]);
merkit[i] = teksti[i] - 64 + 10 - 1; //Lähinnä selkeyden vuoksi
}
//Erikoismerkit muutetaan käsipelillä. Tuntematon merkki muutetaan välilyönniksi.
else switch (teksti[i]) {
case '>': merkit[i] = 38; break;
case '<': merkit[i] = 39; break;
case '.': merkit[i] = 40; break;
case ',': merkit[i] = 41; break;
case ':': merkit[i] = 42; break;
case ';': merkit[i] = 43; break;
case '(': merkit[i] = 45; break;
case ')': merkit[i] = 46; break;
default: merkit[i] = 44;
}
}
}
//Määritetään merkistö
string kirjaimet[7][47] = {
" ##### ", " ### ", " ###### ", "###### ", "# ", "#######", " ######", "#######", " ##### ", " ##### ", " ##### ", "###### ", " #####", "##### ", "#######", "#######", " ##### ", "# #", "#", " #", "# #", "# ", "# #", "# #", " ##### ", "###### ", " ##### ", "###### ", " ######", "#######", "# #", "# #", "# #", "# #", "# #", "#######", "#", " ##### ", "# ", " #", " ", " ", "##", "##", " ", " #", "# ",
"## #", " # ", "# #", " #", "# ", "# ", "# ", " # ", "# #", "# #", "# #", "# #", " # ", "# # ", "# ", "# ", "# ", "# #", "#", " #", "# # ", "# ", "## ##", "## #", "# #", "# #", "# #", "# #", "# ", " # ", "# #", "# #", "# #", " # # ", "# #", " # ", "#", "# #", " # ", " # ", " ", " ", "##", "##", " ", " # ", " # ",
"# # #", " # ", " # ", " #", "# # ", "# ", "# ", " # ", "# #", "# #", "# #", "# #", "# ", "# #", "# ", "# ", "# ", "# #", "#", " #", "# # ", "# ", "# # # #", "# # #", "# #", "# #", "# #", "# #", "# ", " # ", "# #", "# #", "# #", " # # ", " # # ", " # ", "#", " # ", " # ", " # ", " ", " ", " ", " ", " ", "# ", " #",
"# # #", " # ", " # ", "###### ", " ######", " ##### ", "###### ", " ##### ", " ##### ", " ##### ", "#######", "###### ", "# ", "# #", "#######", "#### ", "# #### ", "#######", "#", " #", "#### ", "# ", "# # #", "# # #", "# #", "###### ", "# #", "###### ", " ##### ", " # ", "# #", "# #", "# #", " # ", " # ", " # ", "#", " # ", " #", "# ", " ", " ", " ", " ", " ", "# ", " #",
"# # #", " # ", " # ", " #", " # ", " #", "# #", " # ", "# #", " # ", "# #", "# #", "# ", "# #", "# ", "# ", "# #", "# #", "#", "# #", "# # ", "# ", "# #", "# # #", "# #", "# ", "# # #", "# # ", " #", " # ", "# #", "# #", "# #", " # # ", " # ", " # ", "#", " # ", " # ", " # ", " ", " ", " ", " ", " ", "# ", " #",
"# ##", " # ", " # ", " #", " # ", "# #", "# #", " # ", "# #", " # ", "# #", "# #", " # ", "# # ", "# ", "# ", "# #", "# #", "#", "# #", "# # ", "# ", "# #", "# ##", "# #", "# ", "# # ", "# # ", " #", " # ", "# #", " # # ", "# # #", " # # ", " # ", " # ", " ", " ", " # ", " # ", "##", " #", "##", " #", " ", " # ", " # ",
" ##### ", "#######", " #######", "###### ", " # ", " ##### ", " ##### ", "# ", " ##### ", " # ", "# #", "###### ", " #####", "##### ", "#######", "# ", " ##### ", "# #", "#", " ##### ", "# #", "#######", "# #", "# #", " ##### ", "# ", " #### #", "# #", "###### ", " # ", " ##### ", " # ", " # # ", "# #", " # ", "#######", "#", " # ", "# ", " #", "##", "# ", "##", "# ", " ", " #", "# "
};
//Tulostetaan kirjaimet
for (int i = 0; i < 7; i++) {
for (int a = 0; a < teksti.size(); a++) {
cout << kirjaimet[i][merkit[a]] << " ";
}
cout << endl;
}
//Työpöytäystävällinen lopetus
if (!argv[1]) {
cout << "\nLopeta painamalla enter.";
getchar();
}
return EXIT_SUCCESS;
}Binääreitä ei (enää) ole.
Kiva ohjelma :) Saa kanssairkkaajat kärsiä nyt :D
:D
Suuri kiitos mahtavasta vinkistä, näin C++ -koodia opettelevana, tästä oli suuri apu, piti vähän jopa itte pähkäillä miten pääsee erroreista eroon. Luultavasti ongelmana nykypäivän ohjelmat, ainakin Visual Studion C++ jota ite käytän.
Eli ongelma jotka aiheutti erroria oli:
int merkit[teksti.size()];
Kohta oli muutettava muotoon:
int merkit[255];
Eli mikäli ymmärsin oikein, merkit-array on muutokseni jälkeen 255 merkkiä käsittävä, eli pitäis riittää :)
Muutama kohta jotka eivät tosin estä ohjelman käynnistymistä, mutta herjaavat varoitusta, tuottaa (tuotti, ennen ku onnistuin ne ratkaisemaan :P) nuo for-lauseiden:
i < strlen(argv[a]); i < teksti.size(); a < teksti.size();
Ensimmäisestä mainitsemastani kohdasta pääsi helposti eroon kun laitto ennen kyseistä for-lausetta:
int b = strlen(argv[a]);
Ja tietysti for-lauseeseen sitten i < b;
Vastaavasti toinen ja kolmas varoituksen antava rivi korjaantuu:
int koko = teksti.size();
Ja for-lauseeseen taas i < koko;
Tässä siis toivottavasti pientä apua niille muille tasoisilleni alottelijoille jotka pähkäilevät tämän koodin ja uusien ohjelmien (tai kenties vain Visual Studion) kanssa :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.