Advertisement
heroys6

Translit Master

Oct 2nd, 2015
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.53 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <fstream>
  5. #include <cctype>
  6. #include <Windows.h>
  7. //#include <locale>
  8.  
  9. using namespace std;
  10.  
  11. char LatToCyr(char r);
  12. char CyrToLat(char r);
  13.  
  14. int main()
  15. {
  16.     //setlocale(LC_CTYPE, "rus");
  17.  
  18.     SetConsoleCP(1251);
  19.     SetConsoleOutputCP(1251);
  20.  
  21.     short int chk = 0;
  22.     short int answ = 0;
  23.  
  24.     cout << "[ T R A N S L I T ] v1.1\n\n" << "This program can code/decode your Cyrillic text to/from the Latin\n\n";
  25.  
  26.     do {
  27.         if (chk == 1) cout << "\nBad answer, select one correct please!\n\n";
  28.         chk = 0;
  29.         cout << "Select option:\n\n[1] Code Cyrillic text to the Latin"
  30.             << "\n[2] Decode Cyrillic text from the Latin\n\nYour answer: ";
  31.         cin >> answ;
  32.         if (answ != 1 && answ != 2) chk = 1;
  33.     } while (chk == 1);
  34.  
  35.     switch (answ) {
  36.  
  37.     case 1:
  38.     {
  39.               short int answ_c1 = 0;
  40.               do {
  41.                   cout << "\nDo you want to:\n\n[1] Open file with Cyrillic text\n\n[2] Enter it yourself\n\nYour answer: ";
  42.                   cin >> answ_c1;
  43.               } while (answ_c1 != 1 && answ_c1 != 2);
  44.  
  45.               if (answ_c1 == 1){
  46.                   char file_name[30];
  47.                   cout << "\nEnter file name or directory\n(if file and program located in different places): ";
  48.                   cin >> file_name;
  49.  
  50.                   ifstream from(file_name, ios::in || ios::binary);
  51.                   if (!from)
  52.                   {
  53.                       cout << "\nNo such file or directory\n";
  54.                       system("pause");
  55.                       return 1;
  56.                   }
  57.                   else{
  58.                       short int answ_c1_o = 0;
  59.                       do {
  60.                           cout << "\nSelect option:\n\n[1] Output on the screen\n[2] Output to the file\n\nYour answer: ";
  61.                           cin >> answ_c1_o;
  62.                       } while (answ_c1_o != 1 && answ_c1_o != 2);
  63.  
  64.                       switch (answ_c1_o){
  65.                       case 1:{
  66.                                  char buf;
  67.                                  cout << "\nDecoded cyrillic text:\n";
  68.                                  while (from.get(buf))
  69.                                      cout << CyrToLat(buf);
  70.                       }
  71.                       case 2:{
  72.                                  char file_name[30];
  73.                                  cout << "\nEnter file name(name.txt e.g.) for save in program directory\nor full path(D:/name.txt e.g.): ";
  74.                                  cin >> file_name;
  75.                                  ofstream to(file_name);
  76.                                  if (!to){
  77.                                      cout << "Error of writing";
  78.                                      return 1;
  79.                                  }
  80.                                  else{
  81.                                      char buf;
  82.                                      to << "Decoded cyrillic text:\n";
  83.                                      while (from.get(buf))
  84.                                          to << CyrToLat(buf);
  85.  
  86.                                  }
  87.                       }
  88.                       }
  89.                   }
  90.               }
  91.               if (answ_c1 == 2){
  92.                   char input[501];
  93.                   char *ptr = input;
  94.                   cout << "\nCyrillic text: ";
  95.                   fflush(stdin);
  96.                   gets_s(input, 500);
  97.                   cout << "\n\nDecoded latin text:\n";
  98.                   while (*ptr){
  99.                       cout << CyrToLat(*ptr);
  100.                       ptr++;
  101.                   }
  102.               }
  103.  
  104.               break;
  105.     }
  106.     case 2:
  107.     {
  108.               short int answ_c2 = 0;
  109.               do {
  110.                   cout << "\nDo you want to:\n\n[1] Open file with Latin translit\n\n[2] Enter it yourself\n\nYour answer: ";
  111.                   cin >> answ_c2;
  112.               } while (answ_c2 != 1 && answ_c2 != 2);
  113.  
  114.               if (answ_c2 == 1){
  115.                   char file_name[30];
  116.                   cout << "\nEnter file name or directory\n(if file and program located in different places): ";
  117.                   cin >> file_name;
  118.  
  119.                   ifstream from(file_name, ios::in || ios::binary);
  120.                   if (!from)
  121.                   {
  122.                       cout << "\nNo such file or directory\n";
  123.                       system("pause");
  124.                       return 1;
  125.                   }
  126.                   else{
  127.                       char buf;
  128.                       cout << "\nDecoded cyrillic text:\n";
  129.                       while (from.get(buf))
  130.                           cout << LatToCyr(tolower(buf));
  131.                   }
  132.               }
  133.               if (answ_c2 == 2){
  134.                   char input[501];
  135.                   char *ptr = input;
  136.                   cout << "\nLatin text: ";
  137.                   fflush(stdin);
  138.                   gets_s(input, 500);
  139.                   cout << "\n\nDecoded cyrillic text:\n";
  140.                   while (*ptr){
  141.                       cout << LatToCyr(tolower(*ptr));
  142.                       ptr++;
  143.                   }
  144.               }
  145.               break;
  146.     }
  147.     }
  148.  
  149.     cout << endl << endl;
  150.     system("pause");
  151.     return 0;
  152. }
  153.  
  154. char LatToCyr(char r)
  155. {
  156.     char exclusion[2] = "'";
  157.     switch (r)
  158.     {
  159.     case 'q':
  160.         return 'й';
  161.         break;
  162.     case 'w':
  163.         return 'ц';
  164.         break;
  165.     case 'e':
  166.         return 'у';
  167.         break;
  168.     case 'r':
  169.         return 'к';
  170.         break;
  171.     case 't':
  172.         return 'е';
  173.         break;
  174.     case 'y':
  175.         return 'н';
  176.         break;
  177.     case 'u':
  178.         return 'г';
  179.         break;
  180.     case 'i':
  181.         return 'ш';
  182.         break;
  183.     case 'o':
  184.         return 'щ';
  185.         break;
  186.     case 'p':
  187.         return 'з';
  188.         break;
  189.     case 'a':
  190.         return 'ф';
  191.         break;
  192.     case 's':
  193.         return 'ы';
  194.         break;
  195.     case 'd':
  196.         return 'в';
  197.         break;
  198.     case 'f':
  199.         return 'а';
  200.         break;
  201.     case 'g':
  202.         return 'п';
  203.         break;
  204.     case 'h':
  205.         return 'р';
  206.         break;
  207.     case 'j':
  208.         return 'о';
  209.         break;
  210.     case 'k':
  211.         return 'л';
  212.         break;
  213.     case 'l':
  214.         return 'д';
  215.         break;
  216.     case 'z':
  217.         return 'я';
  218.         break;
  219.     case 'x':
  220.         return 'ч';
  221.         break;
  222.     case 'c':
  223.         return 'с';
  224.         break;
  225.     case 'v':
  226.         return 'м';
  227.         break;
  228.     case 'b':
  229.         return 'и';
  230.         break;
  231.     case 'n':
  232.         return 'т';
  233.         break;
  234.     case 'm':
  235.         return 'ь';
  236.         break;
  237.     case ',':
  238.         return 'б';
  239.         break;
  240.     case '.':
  241.         return 'ю';
  242.         break;
  243.     case '/':
  244.         return '.';
  245.         break;
  246.     case ' ':
  247.         return ' ';
  248.         break;
  249.     case '[':
  250.         return 'х';
  251.         break;
  252.     case ']':
  253.         return 'ъ';
  254.         break;
  255.     case ';':
  256.         return 'ж';
  257.         break;
  258.     case '`':
  259.         return 'ё';
  260.         break;
  261.     case '?':
  262.         return ',';
  263.         break;
  264.     case '&':
  265.         return '?';
  266.         break;
  267.     }
  268.  
  269.     if (r == exclusion[0]) return 'э';
  270.     else
  271.         return r;
  272. }
  273.  
  274. char CyrToLat(char r)
  275. {
  276.     char exclusion[2] = "'";
  277.     switch (r)
  278.     {
  279.     case 'й':
  280.         return 'q';
  281.         break;
  282.     case 'ц':
  283.         return 'w';
  284.         break;
  285.     case 'у':
  286.         return 'e';
  287.         break;
  288.     case 'к':
  289.         return 'r';
  290.         break;
  291.     case 'е':
  292.         return 't';
  293.         break;
  294.     case 'н':
  295.         return 'y';
  296.         break;
  297.     case 'г':
  298.         return 'u';
  299.         break;
  300.     case 'ш':
  301.         return 'i';
  302.         break;
  303.     case 'щ':
  304.         return 'o';
  305.         break;
  306.     case 'з':
  307.         return 'p';
  308.         break;
  309.     case 'ф':
  310.         return 'a';
  311.         break;
  312.     case 'ы':
  313.         return 's';
  314.         break;
  315.     case 'в':
  316.         return 'd';
  317.         break;
  318.     case 'а':
  319.         return 'f';
  320.         break;
  321.     case 'п':
  322.         return 'g';
  323.         break;
  324.     case 'р':
  325.         return 'h';
  326.         break;
  327.     case 'о':
  328.         return 'j';
  329.         break;
  330.     case 'л':
  331.         return 'k';
  332.         break;
  333.     case 'д':
  334.         return 'l';
  335.         break;
  336.     case 'я':
  337.         return 'z';
  338.         break;
  339.     case 'ч':
  340.         return 'x';
  341.         break;
  342.     case 'с':
  343.         return 'c';
  344.         break;
  345.     case 'м':
  346.         return 'v';
  347.         break;
  348.     case 'и':
  349.         return 'b';
  350.         break;
  351.     case 'т':
  352.         return 'n';
  353.         break;
  354.     case 'ь':
  355.         return 'm';
  356.         break;
  357.     case 'б':
  358.         return ',';
  359.         break;
  360.     case 'ю':
  361.         return '.';
  362.         break;
  363.     case 'ж':
  364.         return ';';
  365.         break;
  366.     case 'х':
  367.         return '[';
  368.         break;
  369.     case 'ъ':
  370.         return ']';
  371.         break;
  372.     case 'ё':
  373.         return '`';
  374.         break;
  375.     }
  376.  
  377.     if (r == 'э') return exclusion[0];
  378.     else
  379.         return r;
  380. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement