Advertisement
Guest User

C++. Phone numbers

a guest
Nov 6th, 2016
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.32 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. #include <iostream>
  4. #include <fstream>
  5. #include <string>
  6. #include <stdio.h>
  7. #include <array>
  8. using namespace std;
  9.  
  10. string phone(char number[], int num, string words[]);
  11. string** find(string* vars[], string curD, string curDN, string words[], int* n,int num,int length, int s);
  12.  
  13. int main()
  14. {
  15.  
  16.     string tem = "start";
  17.     int numStr;
  18.     int cntr = 0;
  19.     char *number = new char[0];
  20.     string *words = new string[0];
  21.  
  22.     string numSrt;
  23.  
  24.     while (tem != "-1")
  25.     {
  26.         cin >> tem;
  27.         if (tem != "-1")
  28.         {
  29.             if (cntr != 0)
  30.                 cout << endl;
  31.             strcpy(number, tem.c_str());
  32.             cin >> tem;
  33.             numStr = stoi(tem);
  34.  
  35.             words = new string[numStr];
  36.  
  37.             for (int i = 0; i < numStr; i++)
  38.             {
  39.                 cin >> words[i];
  40.             }
  41.  
  42.             numSrt = phone(number, numStr, words);
  43.             cout << numSrt;
  44.             cntr = cntr + 1;
  45.         };
  46.     };
  47.    
  48.     return 0;
  49. }
  50.  
  51. string phone(char number[], int num, string words[])
  52. {
  53.     for (int i = 0; i < num; i++)
  54.     {
  55.     }
  56.  
  57.     int length = strlen(number);
  58.  
  59.     string **vars = new string*[2];
  60.     vars[0] = new string[pow(3, num)];
  61.     vars[1] = new string[pow(3, num)];
  62.     string **varsR = new string*[2];
  63.     varsR[0] = new string[0];
  64.     varsR[1] = new string[0];
  65.     string **varsD = new string*[2];
  66.     varsD[0] = new string[0];
  67.     varsD[1] = new string[0];
  68.  
  69.  
  70.     int s = 1;
  71.  
  72.     string curSS;
  73.     string curSN;
  74.  
  75.     int c = 0;
  76.     for (int i = 0; i < num; i++)
  77.     {
  78.         s = 0;
  79.         curSS = words[i];
  80.         curSN = to_string(i + 1);
  81.         if (curSS.length() == length)
  82.         {
  83.             vars[0][c] = curSS;
  84.             vars[1][c] = curSN;
  85.  
  86.             c = c + 1;
  87.         }
  88.         else
  89.         {
  90.  
  91.                 vars = find(vars, curSS, curSN, words, &c, num, length, s);
  92.         };
  93.     }
  94.  
  95.     char* chV = new char[0];
  96.     char* chW = new char[0];
  97.     int tst = 1;
  98.     char cur;
  99.     int r = 0;
  100.     size_t pos;
  101.     string str;
  102.     string curS;
  103.  
  104.     for (int i = 0; i < pow(3,num); i++)
  105.     {
  106.         if (vars[0][i] != "")
  107.         {
  108.  
  109.             varsD[0] = new string[i + 1];
  110.             varsD[1] = new string[i + 1];
  111.         }
  112.     };
  113.  
  114.     for (int i = 0; i < pow(3, num);i++)
  115.     {
  116.         if (vars[0][i] != "")
  117.         {
  118.             tst = 1;
  119.             for (int ii = 0; ii < num;ii++)
  120.             {  
  121.                 if (tst > 0)
  122.                 {
  123.                     str = vars[0][i];
  124.                     curS = words[ii];
  125.                     pos = str.find(curS);
  126.                     if (pos != string::npos)
  127.                     {
  128.                         str.erase(pos, strlen(curS.c_str()));
  129.                         if (str.find(curS, pos) != string::npos)
  130.                         {
  131.                             tst = tst - num;
  132.                         }
  133.                     }
  134.                 }
  135.             }
  136.             if (tst > 0)
  137.             {
  138.                 varsD[0][r] = vars[0][i];
  139.                 varsD[1][r] = vars[1][i];
  140.                 r = r + 1;
  141.                 varsR[0] = new string[r];
  142.                 varsR[1] = new string[r];
  143.             }
  144.         }
  145.     }
  146.     int rr = 0;
  147.  
  148.     for (int i = 0; i < r; i++)
  149.     {
  150.         if (varsD[0][i] != "")
  151.         {
  152.             tst = 1;
  153.             strcpy(chV, varsD[0][i].c_str());
  154.             for (int ii = 0; ii < strlen(chV);ii++)
  155.             {
  156.                 if (tst > 0)
  157.                 {
  158.                     cur = chV[ii];
  159.                     if (number[ii] == '0')
  160.                         if (cur != 'q' && cur != 'o' && cur != 'z')
  161.                             tst = tst - 5;
  162.                     if (number[ii] == '1')
  163.                         if (cur != 'i' && cur != 'j')
  164.                             tst = tst - 5;
  165.                     if (number[ii] == '2')
  166.                         if (cur != 'a' && cur != 'b' && cur != 'c')
  167.                             tst = tst - 5;
  168.                     if (number[ii] == '3')
  169.                         if (cur != 'd' && cur != 'e' && cur != 'f')
  170.                             tst = tst - 5;
  171.                     if (number[ii] == '4')
  172.                         if (cur != 'g' && cur != 'h')
  173.                             tst = tst - 5;
  174.                     if (number[ii] == '5')
  175.                         if (cur != 'k' && cur != 'l')
  176.                             tst = tst - 5;
  177.                     if (number[ii] == '6')
  178.                         if (cur != 'm' && cur != 'n')
  179.                             tst = tst - 5;
  180.                     if (number[ii] == '7')
  181.                         if ((cur != 'r') && (cur != 'p') && (cur != 's'))
  182.                             tst = tst - 5;
  183.                     if (number[ii] == '8')
  184.                         if (cur != 't' && cur != 'u' && cur != 'v')
  185.                             tst = tst - 5;
  186.                     if (number[ii] == '9')
  187.                         if (cur != 'w' && cur != 'x' && cur != 'y')
  188.                             tst = tst - 5;
  189.                    
  190.                 }
  191.             }
  192.             if (tst > 0)
  193.             {
  194.                 varsR[0][rr] = varsD[0][i];
  195.                 varsR[1][rr] = varsD[1][i];
  196.                 rr = rr + 1;
  197.             }
  198.         }
  199.     };
  200.  
  201.     int min = num + num - 1;
  202.     int count = 0;
  203.     string varsE = "";
  204.     string returnE = "No solution.";
  205.     string varsEN = "";
  206.     string curE = "";
  207.     int curEN = 0;
  208.  
  209.     for (int i = 0; i < rr;i++)
  210.     {
  211.         if (varsR[0][i] != "")
  212.         {
  213.             str = varsR[1][i];
  214.             strcpy(chV, str.c_str());
  215.             count = 0;
  216.             curEN = 0;
  217.             varsEN = "";
  218.             varsE = "";
  219.             for (int ii = 0; ii <= strlen(chV); ii++)
  220.             {
  221.                 if (chV[ii] != ' ' && ii != strlen(chV))
  222.                 {
  223.                     curE = curE + string(1, chV[ii]);
  224.                 }
  225.                 else
  226.                 {
  227.                     curEN = stoi(curE);
  228.                     count = count + 1;
  229.                     if (varsEN != "")
  230.                     {
  231.                         varsEN = varsEN + " " + curE;
  232.                     }
  233.                     else
  234.                     {
  235.                         varsEN = curE;
  236.                     }
  237.                     if (varsE != "")
  238.                     {
  239.                         varsE = varsE + " " + words[curEN-1];
  240.                     }
  241.                     else
  242.                     {
  243.                         varsE = words[curEN-1];
  244.                     }
  245.                     curE = "";
  246.                 }
  247.             if (count <= min)
  248.             {
  249.                 min = count;
  250.                 returnE = varsE;
  251.             }
  252.             }
  253.         }
  254.     }
  255.     return returnE;
  256. }
  257.  
  258. string** find(string* vars[], string curD, string curDN, string words[], int* n,int num, int length, int s)
  259. {
  260.  
  261.     string cur;
  262.     string curN;
  263.     for (int i = 0;i < num;i++)
  264.     {
  265.         cur = curD;
  266.         curN = curDN;
  267.         if ((cur != words[i]) && ((cur + words[i]).length() <= length))
  268.         {
  269.             cur = cur + words[i];
  270.             curN = curN + " " + to_string(i + 1);
  271.             if (cur.length() == length)
  272.             {
  273.                 vars[0][*n] = cur;
  274.                 vars[1][*n] = curN;
  275.                 *n = *n + 1;
  276.             } else
  277.             {
  278.                     vars = find(vars, cur, curN, words, n, num, length, s);
  279.             };
  280.         };
  281.     };
  282.     return vars;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement