Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Teksti ASCII-Grafiikaksi

exAtuu [23.08.2005 01:59:13]

#

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;
}

exAtuu [23.08.2005 02:03:52]

#

Binääreitä ei (enää) ole.

p-p [02.11.2006 21:48:53]

#

Kiva ohjelma :) Saa kanssairkkaajat kärsiä nyt :D

moptim [24.12.2006 13:16:30]

#

:D

amph [25.05.2009 23:46:24]

#

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 :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta