Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MAXLENGTH 100
- #include <string.h>
- #include <stdio.h>
- void getNumber(char *number);
- int determineNumber(char *number);
- void startEncoding(char *number);
- void displayNumber(char *number);
- char *encoder(char *number, char *encodedNumber);
- void units(char *encoded, int digit)
- {
- switch(digit)
- {
- case 1:
- {
- strcat(encoded, "un");
- break;
- }
- case 2:
- {
- strcat(encoded, "deux");
- break;
- }
- case 3:
- {
- strcat(encoded, "trois");
- break;
- }
- case 4:
- {
- strcat(encoded, "quatre");
- break;
- }
- case 5:
- {
- strcat(encoded, "cinq");
- break;
- }
- case 6:
- {
- strcat(encoded, "six");
- break;
- }
- case 7:
- {
- strcat(encoded, "sept");
- break;
- }
- case 8:
- {
- strcat(encoded, "huit");
- break;
- }
- case 9:
- {
- strcat(encoded, "neuf");
- break;
- }
- }
- }
- void tens(char *encoded, int digit)
- {
- switch(digit)
- {
- case 10:
- {
- strcat(encoded, "dix");
- break;
- }
- case 11:
- {
- strcat(encoded, "onze");
- break;
- }
- case 12:
- {
- strcat(encoded, "douze");
- break;
- }
- case 13:
- {
- strcat(encoded, "treize");
- break;
- }
- case 14:
- {
- strcat(encoded, "quatorze");
- break;
- }
- case 15:
- {
- strcat(encoded, "quinze");
- break;
- }
- case 16:
- {
- strcat(encoded, "seize");
- break;
- }
- case 17:
- {
- strcat(encoded, "dix-sept");
- break;
- }
- case 18:
- {
- strcat(encoded, "dix-huit");
- break;
- }
- case 19:
- {
- strcat(encoded, "dix-neuf");
- break;
- }
- }
- }
- void bigTens(char *encodedNumber, int number)
- {
- switch(number)
- {
- case 2:
- {
- strcat(encodedNumber, "vingt");
- break;
- }
- case 3:
- {
- strcat(encodedNumber, "trente");
- break;
- }
- case 4:
- {
- strcat(encodedNumber, "quarante");
- break;
- }
- case 5:
- {
- strcat(encodedNumber, "cinquante");
- break;
- }
- case 6:
- {
- strcat(encodedNumber, "soixante");
- break;
- }
- case 7:
- {
- strcat(encodedNumber, "soixante");
- break;
- }
- case 8:
- {
- strcat(encodedNumber, "quatre-vingt");
- break;
- }
- case 9:
- {
- strcat(encodedNumber, "quatre-vingt");
- break;
- }
- }
- }
- int main()
- {
- char number[MAXLENGTH];
- char command[100];
- 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.");
- while(1)
- {
- printf("\n\nEnter a number to encode it or its representation in french to decode it:\n");
- printf("\n\nPlease do not use the dash character '-' as a separator.\n");
- getNumber(number);
- if(determineNumber(number)==1)
- {
- startEncoding(number);
- }
- else if(strcmp(number, "exit")==0)
- {
- printf("You have quit the program!!");
- break;
- }
- else if(determineNumber(number)>=2)
- {
- printf("The data you entered is not valid - try again.");
- }
- }
- return 0;
- }
- void getNumber(char *number)
- {
- fgets(number, MAXLENGTH, stdin);
- number[strlen(number)-1]='\0';
- }
- void displayNumber(char *number)
- {
- printf("%s", number);
- }
- int determineNumber(char *number)
- {
- char digits[] = "1234567890";
- char alphabet[] = "qwertyuiopasdfghjklzxcvbnm ";
- short det=1;
- for(int i=0; i<strlen(number); i++)
- {
- if(strchr(digits, number[i])==NULL)
- {
- det=0;
- i=strlen(number);
- }
- }
- //if det==1, then the number is made exclusively of digits, so it has to be encoded in french
- if(det)
- return 1;
- det=1;
- for(short i=0; i<strlen(number); i++)
- {
- if(strchr(alphabet, number[i])==NULL)
- {
- det=0;
- i=strlen(number);
- }
- }
- //if det==1, then it has to be decodified
- if(det)
- return 0;
- return 2;
- }
- void startEncoding(char *number)
- {
- //We check if the number is 0
- short k=1;
- for(short i=0; i<strlen(number); i++)
- {
- if(number[i]!='0')
- k=0;
- }
- if(k)
- printf("%s", "zero");
- else
- {
- char encodedNumber[MAXLENGTH];
- encodedNumber[0]='\0';
- int numberdigits = strlen(number);
- if(strlen(number)<=3)
- printf("%s", encoder(number, encodedNumber));
- else
- {
- switch(numberdigits)
- {
- case 4:
- {
- units(encodedNumber, number[0]-'0');
- strcat(encodedNumber, " mille ");
- strcpy(number, number+1);
- char encodedNumber2[MAXLENGTH];
- encodedNumber2[0]='\0';
- strcat(encodedNumber, encoder(number, encodedNumber2));
- break;
- }
- case 5:
- {
- char newNumber[MAXLENGTH];
- char encodedNumber2[MAXLENGTH];
- encodedNumber2[0]='\0';
- strcpy(newNumber, number);
- newNumber[2]='\0';
- strcat(encodedNumber, encoder(newNumber, encodedNumber2));
- strcat(encodedNumber, " mille ");
- strcpy(number, number+2);
- encodedNumber2[0]='\0';
- strcat(encodedNumber, encoder(number, encodedNumber2));
- break;
- }
- case 6:
- {
- char newNumber[MAXLENGTH];
- char encodedNumber2[MAXLENGTH];
- encodedNumber2[0]='\0';
- strcpy(newNumber, number);
- newNumber[3]='\0';
- strcat(encodedNumber, encoder(newNumber, encodedNumber2));
- strcat(encodedNumber, " mille ");
- strcpy(number, number+3);
- encodedNumber2[0]='\0';
- strcat(encodedNumber, encoder(number, encodedNumber2));
- break;
- }
- case 7:
- {
- char encodedNumber2[MAXLENGTH];
- encodedNumber2[0]='\0';
- char encodedNumber3[MAXLENGTH];
- encodedNumber3[0]='\0';
- units(encodedNumber, number[0]-'0');
- strcat(encodedNumber, " million ");
- char firstThree[MAXLENGTH];
- strcpy(number, number+1);
- strcpy(firstThree, number);
- firstThree[3]='\0';
- strcpy(number, number+3);
- char lastThree[MAXLENGTH];
- strcpy(lastThree, number);
- lastThree[3]='\0';
- if(strcmp(firstThree, "000")!=0)
- strcat(encodedNumber, encoder(firstThree, encodedNumber2));
- if(strcmp(firstThree, "000")!=0)
- {
- strcat(encodedNumber, " mille ");
- }
- if(strcmp(lastThree, "000")!=0)
- strcat(encodedNumber, encoder(lastThree, encodedNumber3));
- break;
- }
- case 8:
- {
- if(strcmp(number, "10000000")==0)
- strcpy(encodedNumber, "dix millions");
- }
- }
- printf("%s", encodedNumber);
- }
- }
- }
- char* encoder(char *number, char *encodedNumber)
- {
- char c1[MAXLENGTH];
- strcpy(c1, number);
- if(strlen(number)==3)
- {
- if(strcmp(number, "000")==0)
- return " ";
- c1[2]='\0';
- if(c1[0]=='0' && c1[1]=='0')
- strcpy(number, number+2);
- else if(c1[0]=='0')
- strcpy(number, number+1);
- }
- else if(strlen(number)==2)
- {
- if(strcmp(number, "00")==0)
- return " ";
- if(number[0]=='0')
- strcpy(number, number+1);
- }
- int numberInt=0;
- for(int i=0; i<strlen(number); i++)
- {
- int digit=number[i]-'0';
- numberInt = numberInt * 10 + digit;
- }
- if(strlen(number)==1)
- {
- units(encodedNumber, numberInt);
- return encodedNumber;
- }
- else if(strlen(number)==2 && numberInt<=19 && numberInt>=10)
- tens(encodedNumber, numberInt);
- else if(strlen(number)==2 && numberInt>19 && numberInt/10!=7 && numberInt/10 != 9)
- {
- bigTens(encodedNumber, numberInt/10);
- if(numberInt%10>1)
- {
- strcat(encodedNumber, "-");
- units(encodedNumber, numberInt%10);
- }
- else if(numberInt%10==1)
- {
- strcat(encodedNumber, " et ");
- units(encodedNumber, numberInt%10);
- }
- return encodedNumber;
- }
- else if(strlen(number)==2 && numberInt>19 && (numberInt/10==7 || numberInt/10 == 9))
- {
- bigTens(encodedNumber, numberInt/10);
- if(numberInt%10>1)
- {
- strcat(encodedNumber, "-");
- tens(encodedNumber, numberInt%10+10);
- }
- else if(numberInt%10==1)
- {
- strcat(encodedNumber, " et ");
- tens(encodedNumber, numberInt%10+10);
- }
- else
- {
- strcat(encodedNumber, "-");
- tens(encodedNumber, numberInt%10+10);
- }
- }
- char u2[3];
- strcpy(u2, number+1);
- if(strlen(number)<3 && strcmp(u2, "00")==0)
- return "";
- else if(strlen(number)==3 && number[1]!='0' && strcmp(u2, "00")!=0)
- {
- char firstDigit[20];
- firstDigit[0]=NULL;
- if(number[0]!='1')
- {
- units(firstDigit, numberInt/100);
- strcat(encodedNumber, firstDigit);
- }
- strcat(encodedNumber, " cent ");
- strcpy(number, number+1);
- char encodedNumber2[MAXLENGTH];
- encodedNumber2[0]='\0';
- strcat(encodedNumber, encoder(number, encodedNumber2));
- }
- else if(strlen(number)==3 && number[1]=='0' && number[2]!='0')
- {
- char firstDigit[20];
- firstDigit[0]=NULL;
- if(number[0]!='1' || number[0]!='0')
- {
- if(number[0]!='1')
- units(firstDigit, numberInt/100);
- strcat(encodedNumber, firstDigit);
- if(number[0]!='1')
- strcat(encodedNumber, " cents ");
- else
- strcat(encodedNumber, " cent ");
- }
- else
- strcat(encodedNumber, " cent ");
- if(number[2]=='1')
- strcat(encodedNumber, " et un");
- else if(number[2]=='0')
- return encodedNumber;
- else if(number[2]>'1')
- units(encodedNumber, number[2]-'0');
- }
- else if(strlen(number)==3 && number[1]=='0' && number[2]=='0')
- {
- if(number[0]!='1')
- {
- units(encodedNumber, number[0]-'0');
- strcat(encodedNumber, " cents ");
- }
- else if(number[0]=='1')
- strcat(encodedNumber, " cent ");
- }
- else if(number == NULL)
- return " ";
- printf("%s ", " ");
- return encodedNumber;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement