Advertisement
Guest User

Untitled

a guest
Jan 30th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.39 KB | None | 0 0
  1. #define MAXLENGTH 100
  2.  
  3. #include <string.h>
  4. #include <stdio.h>
  5.  
  6. void getNumber(char *number);
  7. int determineNumber(char *number);
  8. void startEncoding(char *number);
  9. void displayNumber(char *number);
  10. char *encoder(char *number, char *encodedNumber);
  11.  
  12. void units(char *encoded, int digit)
  13. {
  14.     switch(digit)
  15.     {
  16.     case 1:
  17.     {
  18.         strcat(encoded, "un");
  19.         break;
  20.     }
  21.     case 2:
  22.     {
  23.         strcat(encoded, "deux");
  24.         break;
  25.     }
  26.     case 3:
  27.     {
  28.         strcat(encoded, "trois");
  29.         break;
  30.     }
  31.     case 4:
  32.     {
  33.         strcat(encoded, "quatre");
  34.         break;
  35.     }
  36.     case 5:
  37.     {
  38.         strcat(encoded, "cinq");
  39.         break;
  40.     }
  41.     case 6:
  42.     {
  43.         strcat(encoded, "six");
  44.         break;
  45.     }
  46.     case 7:
  47.     {
  48.         strcat(encoded, "sept");
  49.         break;
  50.     }
  51.     case 8:
  52.     {
  53.         strcat(encoded, "huit");
  54.         break;
  55.     }
  56.     case 9:
  57.     {
  58.         strcat(encoded, "neuf");
  59.         break;
  60.     }
  61.     }
  62. }
  63.  
  64. void tens(char *encoded, int digit)
  65. {
  66.     switch(digit)
  67.     {
  68.     case 10:
  69.     {
  70.         strcat(encoded, "dix");
  71.         break;
  72.     }
  73.     case 11:
  74.     {
  75.         strcat(encoded, "onze");
  76.         break;
  77.     }
  78.     case 12:
  79.     {
  80.         strcat(encoded, "douze");
  81.         break;
  82.     }
  83.     case 13:
  84.     {
  85.         strcat(encoded, "treize");
  86.         break;
  87.     }
  88.     case 14:
  89.     {
  90.         strcat(encoded, "quatorze");
  91.         break;
  92.     }
  93.     case 15:
  94.     {
  95.         strcat(encoded, "quinze");
  96.         break;
  97.     }
  98.     case 16:
  99.     {
  100.         strcat(encoded, "seize");
  101.         break;
  102.     }
  103.     case 17:
  104.     {
  105.         strcat(encoded, "dix-sept");
  106.         break;
  107.     }
  108.     case 18:
  109.     {
  110.         strcat(encoded, "dix-huit");
  111.         break;
  112.     }
  113.     case 19:
  114.     {
  115.         strcat(encoded, "dix-neuf");
  116.         break;
  117.     }
  118.     }
  119. }
  120.  
  121. void bigTens(char *encodedNumber, int number)
  122. {
  123.     switch(number)
  124.     {
  125.     case 2:
  126.     {
  127.         strcat(encodedNumber, "vingt");
  128.         break;
  129.     }
  130.     case 3:
  131.     {
  132.         strcat(encodedNumber, "trente");
  133.         break;
  134.     }
  135.     case 4:
  136.     {
  137.         strcat(encodedNumber, "quarante");
  138.         break;
  139.     }
  140.     case 5:
  141.     {
  142.         strcat(encodedNumber, "cinquante");
  143.         break;
  144.     }
  145.     case 6:
  146.     {
  147.         strcat(encodedNumber, "soixante");
  148.         break;
  149.     }
  150.     case 7:
  151.     {
  152.         strcat(encodedNumber, "soixante");
  153.         break;
  154.     }
  155.     case 8:
  156.     {
  157.         strcat(encodedNumber, "quatre-vingt");
  158.         break;
  159.     }
  160.     case 9:
  161.     {
  162.         strcat(encodedNumber, "quatre-vingt");
  163.         break;
  164.     }
  165.     }
  166. }
  167.  
  168. int main()
  169. {
  170.     char number[MAXLENGTH];
  171.     char command[100];
  172.     printf("Welcome to CIFF! This program will take a number as input and print out its representation in french words. Type 'exit' to stop execution.");
  173.     while(1)
  174.     {
  175.         printf("\n\nEnter a number to encode it or its representation in french to decode it:\n");
  176.         printf("\n\nPlease do not use the dash character '-' as a separator.\n");
  177.         getNumber(number);
  178.         if(determineNumber(number)==1)
  179.         {
  180.             startEncoding(number);
  181.         }
  182.  
  183.         else if(strcmp(number, "exit")==0)
  184.         {
  185.             printf("You have quit the program!!");
  186.             break;
  187.         }
  188.  
  189.         else if(determineNumber(number)>=2)
  190.         {
  191.             printf("The data you entered is not valid - try again.");
  192.         }
  193.     }
  194.     return 0;
  195. }
  196.  
  197. void getNumber(char *number)
  198. {
  199.     fgets(number, MAXLENGTH, stdin);
  200.     number[strlen(number)-1]='\0';
  201. }
  202.  
  203. void displayNumber(char *number)
  204. {
  205.     printf("%s", number);
  206. }
  207.  
  208. int determineNumber(char *number)
  209. {
  210.     char digits[] = "1234567890";
  211.     char alphabet[] = "qwertyuiopasdfghjklzxcvbnm ";
  212.     short det=1;
  213.     for(int i=0; i<strlen(number); i++)
  214.     {
  215.         if(strchr(digits, number[i])==NULL)
  216.         {
  217.             det=0;
  218.             i=strlen(number);
  219.         }
  220.     }
  221.     //if det==1, then the number is made exclusively of digits, so it has to be encoded in french
  222.     if(det)
  223.         return 1;
  224.     det=1;
  225.     for(short i=0; i<strlen(number); i++)
  226.     {
  227.         if(strchr(alphabet, number[i])==NULL)
  228.         {
  229.             det=0;
  230.             i=strlen(number);
  231.         }
  232.     }
  233.     //if det==1, then it has to be decodified
  234.     if(det)
  235.         return 0;
  236.     return 2;
  237. }
  238.  
  239. void startEncoding(char *number)
  240. {
  241.     //We check if the number is 0
  242.     short k=1;
  243.     for(short i=0; i<strlen(number); i++)
  244.     {
  245.         if(number[i]!='0')
  246.             k=0;
  247.     }
  248.     if(k)
  249.         printf("%s", "zero");
  250.     else
  251.     {
  252.         char encodedNumber[MAXLENGTH];
  253.         encodedNumber[0]='\0';
  254.         int numberdigits = strlen(number);
  255.         if(strlen(number)<=3)
  256.             printf("%s", encoder(number, encodedNumber));
  257.         else
  258.         {
  259.             switch(numberdigits)
  260.             {
  261.             case 4:
  262.             {
  263.                 units(encodedNumber, number[0]-'0');
  264.                 strcat(encodedNumber, " mille ");
  265.                 strcpy(number, number+1);
  266.                 char encodedNumber2[MAXLENGTH];
  267.                 encodedNumber2[0]='\0';
  268.                 strcat(encodedNumber, encoder(number, encodedNumber2));
  269.                 break;
  270.             }
  271.             case 5:
  272.             {
  273.                 char newNumber[MAXLENGTH];
  274.                 char encodedNumber2[MAXLENGTH];
  275.                 encodedNumber2[0]='\0';
  276.                 strcpy(newNumber, number);
  277.                 newNumber[2]='\0';
  278.                 strcat(encodedNumber, encoder(newNumber, encodedNumber2));
  279.                 strcat(encodedNumber, " mille ");
  280.                 strcpy(number, number+2);
  281.                 encodedNumber2[0]='\0';
  282.                 strcat(encodedNumber, encoder(number, encodedNumber2));
  283.                 break;
  284.             }
  285.             case 6:
  286.             {
  287.                 char newNumber[MAXLENGTH];
  288.                 char encodedNumber2[MAXLENGTH];
  289.                 encodedNumber2[0]='\0';
  290.                 strcpy(newNumber, number);
  291.                 newNumber[3]='\0';
  292.                 strcat(encodedNumber, encoder(newNumber, encodedNumber2));
  293.                 strcat(encodedNumber, " mille ");
  294.                 strcpy(number, number+3);
  295.                 encodedNumber2[0]='\0';
  296.                 strcat(encodedNumber, encoder(number, encodedNumber2));
  297.                 break;
  298.             }
  299.             case 7:
  300.             {
  301.                 char encodedNumber2[MAXLENGTH];
  302.                 encodedNumber2[0]='\0';
  303.                 char encodedNumber3[MAXLENGTH];
  304.                 encodedNumber3[0]='\0';
  305.                 units(encodedNumber, number[0]-'0');
  306.                 strcat(encodedNumber, " million ");
  307.                 char firstThree[MAXLENGTH];
  308.                 strcpy(number, number+1);
  309.                 strcpy(firstThree, number);
  310.                 firstThree[3]='\0';
  311.                 strcpy(number, number+3);
  312.                 char lastThree[MAXLENGTH];
  313.                 strcpy(lastThree, number);
  314.                 lastThree[3]='\0';
  315.                 if(strcmp(firstThree, "000")!=0)
  316.                     strcat(encodedNumber, encoder(firstThree, encodedNumber2));
  317.                 if(strcmp(firstThree, "000")!=0)
  318.                 {
  319.                     strcat(encodedNumber, " mille ");
  320.                 }
  321.                 if(strcmp(lastThree, "000")!=0)
  322.                     strcat(encodedNumber, encoder(lastThree, encodedNumber3));
  323.                 break;
  324.             }
  325.             case 8:
  326.             {
  327.                 if(strcmp(number, "10000000")==0)
  328.                     strcpy(encodedNumber, "dix millions");
  329.             }
  330.             }
  331.             printf("%s", encodedNumber);
  332.         }
  333.     }
  334. }
  335.  
  336. char* encoder(char *number, char *encodedNumber)
  337. {
  338.     char c1[MAXLENGTH];
  339.     strcpy(c1, number);
  340.     if(strlen(number)==3)
  341.     {
  342.         if(strcmp(number, "000")==0)
  343.             return " ";
  344.         c1[2]='\0';
  345.         if(c1[0]=='0' && c1[1]=='0')
  346.             strcpy(number, number+2);
  347.         else if(c1[0]=='0')
  348.             strcpy(number, number+1);
  349.     }
  350.     else if(strlen(number)==2)
  351.     {
  352.         if(strcmp(number, "00")==0)
  353.             return " ";
  354.         if(number[0]=='0')
  355.             strcpy(number, number+1);
  356.     }
  357.     int numberInt=0;
  358.  
  359.     for(int i=0; i<strlen(number); i++)
  360.     {
  361.         int digit=number[i]-'0';
  362.         numberInt = numberInt * 10 + digit;
  363.     }
  364.  
  365.     if(strlen(number)==1)
  366.     {
  367.         units(encodedNumber, numberInt);
  368.         return encodedNumber;
  369.     }
  370.  
  371.     else if(strlen(number)==2 && numberInt<=19 && numberInt>=10)
  372.         tens(encodedNumber, numberInt);
  373.  
  374.     else if(strlen(number)==2 && numberInt>19 && numberInt/10!=7 && numberInt/10 != 9)
  375.     {
  376.         bigTens(encodedNumber, numberInt/10);
  377.         if(numberInt%10>1)
  378.         {
  379.             strcat(encodedNumber, "-");
  380.             units(encodedNumber, numberInt%10);
  381.         }
  382.         else if(numberInt%10==1)
  383.         {
  384.             strcat(encodedNumber, " et ");
  385.             units(encodedNumber, numberInt%10);
  386.         }
  387.         return encodedNumber;
  388.     }
  389.     else if(strlen(number)==2 && numberInt>19 && (numberInt/10==7 || numberInt/10 == 9))
  390.     {
  391.         bigTens(encodedNumber, numberInt/10);
  392.         if(numberInt%10>1)
  393.         {
  394.             strcat(encodedNumber, "-");
  395.             tens(encodedNumber, numberInt%10+10);
  396.         }
  397.         else if(numberInt%10==1)
  398.         {
  399.             strcat(encodedNumber, " et ");
  400.             tens(encodedNumber, numberInt%10+10);
  401.         }
  402.         else
  403.         {
  404.             strcat(encodedNumber, "-");
  405.             tens(encodedNumber, numberInt%10+10);
  406.         }
  407.     }
  408.     char u2[3];
  409.     strcpy(u2, number+1);
  410.     if(strlen(number)<3 && strcmp(u2, "00")==0)
  411.         return "";
  412.     else if(strlen(number)==3 && number[1]!='0' && strcmp(u2, "00")!=0)
  413.     {
  414.         char firstDigit[20];
  415.         firstDigit[0]=NULL;
  416.         if(number[0]!='1')
  417.         {
  418.             units(firstDigit, numberInt/100);
  419.             strcat(encodedNumber, firstDigit);
  420.         }
  421.         strcat(encodedNumber, " cent ");
  422.         strcpy(number, number+1);
  423.         char encodedNumber2[MAXLENGTH];
  424.         encodedNumber2[0]='\0';
  425.         strcat(encodedNumber, encoder(number, encodedNumber2));
  426.     }
  427.     else if(strlen(number)==3 && number[1]=='0' && number[2]!='0')
  428.     {
  429.         char firstDigit[20];
  430.         firstDigit[0]=NULL;
  431.         if(number[0]!='1' || number[0]!='0')
  432.         {
  433.             if(number[0]!='1')
  434.                 units(firstDigit, numberInt/100);
  435.             strcat(encodedNumber, firstDigit);
  436.             if(number[0]!='1')
  437.                 strcat(encodedNumber, " cents ");
  438.             else
  439.                 strcat(encodedNumber, " cent ");
  440.         }
  441.         else
  442.             strcat(encodedNumber, " cent ");
  443.         if(number[2]=='1')
  444.             strcat(encodedNumber, " et un");
  445.         else if(number[2]=='0')
  446.             return encodedNumber;
  447.         else if(number[2]>'1')
  448.             units(encodedNumber, number[2]-'0');
  449.     }
  450.     else if(strlen(number)==3 && number[1]=='0' && number[2]=='0')
  451.     {
  452.         if(number[0]!='1')
  453.         {
  454.             units(encodedNumber, number[0]-'0');
  455.             strcat(encodedNumber, " cents ");
  456.         }
  457.         else if(number[0]=='1')
  458.             strcat(encodedNumber, " cent ");
  459.     }
  460.     else if(number == NULL)
  461.         return " ";
  462.     printf("%s ", " ");
  463.     return encodedNumber;
  464. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement