ulvis.paste.net

Paste Search Dynamic
Recent pastes
ascii_prekladac
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <sstream>
  4. #include <Windows.h>
  5. #include <iomanip>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. //překládač ascii kódu na čísla
  11. int ascii_prekladac(int vstup)
  12. {
  13.     int vystup=-1;
  14.     switch(vstup)
  15.     {
  16.     case 48: vystup=0; break;
  17.     case 49: vystup=1; break;
  18.     case 50: vystup=2; break;
  19.     case 51: vystup=3; break;
  20.     case 52: vystup=4; break;
  21.     case 53: vystup=5; break;
  22.     case 54: vystup=6; break;
  23.     case 55: vystup=7; break;
  24.     case 56: vystup=8; break;
  25.     case 57: vystup=9; break;
  26.     default: vystup=-1; break;
  27.     }
  28.     return vystup;
  29. }
  30.  
  31.  
  32. //změna datového typu INT na STR
  33. string IntToStr(int number)
  34. {
  35.    stringstream ss;//create a stringstream
  36.    ss << number;//add number to the stream
  37.    return ss.str();//return a string with the contents of the stream
  38. }
  39.  
  40. //změna datového typu STR na INT
  41. float StrToInt(string retezec) {
  42.   string s = retezec;
  43.   istringstream is(s);
  44.   float num;
  45.   is >> num;
  46.   return num;
  47. }
  48.  
  49.  
  50. //Ověření vstupních hodnot
  51. double danapromenna=0; //deklarace proměnných
  52. int delka=0;
  53. char cosi[255];
  54. int overeni_vstupu(char hodnota[], bool menu, int rozsah)
  55. {
  56.     delka=strlen(hodnota); //zjistí počet zadaných znaků a uloží jej do proměnné delka
  57.     int tecky=0, minus=0, i=0; //promenne pro overeni poctu minusek a tecek
  58.  
  59.     if (delka > 255) return 2; //pokud je pocet znaku větší jak 255 zobrazí se chyba o přetečení
  60.  
  61.     int kontrola=1, check=0; //proměnná kontrola určuje chybu pokud je 1, zadané znaky nesplňují pravidla, nejedná se o číselnou hodnotu
  62.     string buffer_m = ""; //do této proměnné se postupně ukládají znaky
  63.     char checking[1]; //v této proměnné je uložen vždy jeden právě ověřovaný znak
  64.  
  65.     while (i<delka)
  66.     {
  67.         checking[0] = hodnota[i]; //první znak ze vstupu se dá do proměnné checking
  68.         check=(int)checking[0]; //tento znak se převede na ascii kod
  69.  
  70.         if (check > 47 && check < 58 || (check == 44 || check == 45 || check == 46) && menu == false) //jeho ascii hodnota musí splňovat zadaná pravidla
  71.         {
  72.             if((check == 45 && i != 0) || ((check == 46 || check == 44) && (i == 0+minus || i == delka-1))) //a poté další pravidla pro přesnější určtění
  73.             kontrola=1; //pokud tyto přesnější pravidla nejsou splněna řetězec neprojde kontrolou
  74.             else
  75.             {
  76.             kontrola=0;
  77.             if (check == 46 || check == 44) //pokud je právě ověřovaný znak čárka nebo tečka
  78.                 tecky++; //zvýší se počítadlo teček, jelikož v číselném řetězci může být pouze jedna tečka
  79.             if (tecky == 2) //pokud jsou tečky dvě
  80.             kontrola=1; //řetězec neprojde kontrolou
  81.             }
  82.            
  83.             if (menu == true && (check < 49 || check > rozsah))
  84.             kontrola=1;
  85.         }
  86.         else
  87.         kontrola=1; //pokud právě ověřovaný znak nespňuje požadovaná pravidla, neprojde kontrolou
  88.  
  89.         if (kontrola == 1 || kontrola == 2) //pokud znak neprojde kontrolou
  90.         {
  91.             system("color 04");
  92.             (kontrola == 1) ? cout << "\nPises PICOVINY zadej znova: " : cout << "\nPreteceni datoveho typu."; //vypíše se chybová hláška
  93.             Sleep(500);
  94.             system("color 02");
  95.             delka = 0; //vynulujou se proměnné
  96.             buffer_m = "";
  97.             danapromenna = 0;
  98.             tecky=0;
  99.             minus=0;
  100.             i=0;
  101.             cin >> cosi; //uživatel zadá novou hodnotu
  102.             overeni_vstupu(cosi, menu, rozsah); //a ověřuje se znova
  103.         }
  104.         else
  105.         {
  106.  
  107.                 if ((int)hodnota[i] == 45 && i == 0) //pokud znak projde kontrolou a znak je "-"
  108.                 {
  109.                     buffer_m += "-"; //zapíše se do bufferu mínus
  110.                     minus++; //a zvýší se počet mínusek v řetězci jelikož v něm může být pouze jedno znaménko mínus
  111.                 }
  112.                 if (((int)hodnota[i] == 46 || (int)hodnota[i] == 44) && (i != 0 && i != delka)) //pokud je to tečka nebo čárka
  113.                 buffer_m += "."; //zapíše se tečka
  114.                 if ((int)hodnota[i] != 46 && (int)hodnota[i] != 45 && (int)hodnota[i] != 44) //pokud je to číslo
  115.                 buffer_m+=IntToStr(ascii_prekladac((int)hodnota[i])); //zapíše se číslo
  116.  
  117.                 i++; //a přechází se na další znak
  118.        
  119.             if(i == delka) //pokud jsme již ověřili všechny znaky
  120.             {
  121.                 if (menu == false)
  122.                 {
  123.                     stringstream aux; //převedeme datový typ bufferu na double
  124.                     aux.str(buffer_m);
  125.                     aux >> danapromenna;
  126.                 }
  127.                 else
  128.                 {
  129.                     danapromenna = StrToInt(buffer_m);
  130.                 }
  131.                
  132.                 break;
  133.             }
  134.         }
  135.     }
  136.  
  137.     return 0;
  138.    
  139. }
Parsed in 0.032 seconds