GIDForums  

Go Back   GIDForums > Computer Programming Forums > C Programming Language
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 28-Feb-2007, 23:24
amitgoyal84 amitgoyal84 is offline
New Member
 
Join Date: Feb 2007
Posts: 1
amitgoyal84 is on a distinguished road

C++ to C


Hello there is a code in c++ which does conversion to words.
i need the same logic in c. i am not able to convert this code into C.
Can anybody help me?
Its urgent


CPP / C++ / C Code:
#pragma once


namespace SoficomCollectionSystem
{
    public __gc class Conversion
    {
    private:
        int SearchStr(String *sStr, String *cStr)
        {
            return sStr->IndexOf(cStr);
        }
        String* Left(String* numStr, int index)
        {
            String* retStr = numStr->Substring(0,index);
            return retStr;
        }
        String* Right(String* numStr, int index)
        {
            int Length = numStr->Length;
            if(Length < index) index = Length;
            String* retStr = numStr->Substring(numStr->Length-index);
            return retStr;
        }
        String* Mid(String* numStr, int Start, int Length)
        {
            String* retStr = numStr->Substring(Start, Length);
            return retStr;
        }
        
        System::Boolean IsValidNumber(String *cvNumber)
        {
            int DecimalDigits, MaxLength = 15;
            DecimalDigits = SearchStr(cvNumber,".");
            if(DecimalDigits!=-1 && cvNumber->Length < 19) 
                MaxLength = (cvNumber->Length-15)+15;
            try{
                if(cvNumber->Length == 0 || cvNumber->Length > MaxLength){
                    MessageBox::Show(S"Please enter a valid number.");
                    return false;
                }
                else{
                    System::Globalization::NumberFormatInfo* nfi = new System::Globalization::NumberFormatInfo;
                    cvNumber->ToDouble(nfi);
                    return true;
                }
            }
            catch(...){
                MessageBox::Show(S"Please enter a valid number.");
                return false;
            }
        }
    
        String* ConvertHundreds(String* strNum)
        {
            String* Result;
            if(System::Convert::ToDecimal(strNum)==0) return S"";
            strNum = Right(String::Concat("000",strNum),3);
            if(String::Compare(Left(strNum,1),"0")!=0){
                Result = String::Concat(ConvertDigit(Left(strNum,1))," Hundred ");
            }
            if(String::Compare(Mid(strNum,1,1),"0")!=0){
                Result = String::Concat(Result,ConvertTens(Mid(strNum,1,2)));
            }
            else{
                Result = String::Concat(Result,ConvertDigit(Mid(strNum,2,1)));
            }
            return Result;
        }

        String* ConvertCent(String* strNum)
        {
            String* Result;
            if(System::Convert::ToDecimal(strNum)==0) return S"";
            strNum = Right(String::Concat("000",strNum),3);
            if(String::Compare(Left(strNum,1),"0")!=0){
                Result = String::Concat(ConvertChiffre(Left(strNum,1))," Cent ");
            }
            if(String::Compare(Mid(strNum,1,1),"0")!=0){
                Result = String::Concat(Result,ConvertDix(Mid(strNum,1,2)));
            }
            else{
                Result = String::Concat(Result,ConvertChiffre(Mid(strNum,2,1)));
            }
            return Result;
        }

        String* ConvertTens(String* strTens)
        {
            String* sTens; 
            if(System::Convert::ToInt16(Left(strTens,1))==1){
                int nTens = System::Convert::ToInt16(strTens);
                switch(nTens){
                    case 10: {sTens = String::Copy(S"Ten"); break;}
                    case 11: {sTens = String::Copy(S"Eleven"); break;}
                    case 12: {sTens = String::Copy(S"Twelve"); break;}
                    case 13: {sTens = String::Copy(S"Thirteen"); break;}
                    case 14: {sTens = String::Copy(S"Fourteen"); break;}
                    case 15: {sTens = String::Copy(S"Fifteen"); break;}
                    case 16: {sTens = String::Copy(S"Sixteen"); break;}
                    case 17: {sTens = String::Copy(S"Seventeen"); break;}
                    case 18: {sTens = String::Copy(S"Eighteen"); break;}
                    case 19: {sTens = String::Copy(S"Nineteen"); break;}
                }
            }
            else{
                switch(System::Convert::ToInt16(Left(strTens,1))){
                    case 2: {sTens = String::Copy(S"Twenty "); break;}
                    case 3: {sTens = String::Copy(S"Thirty "); break;}
                    case 4: {sTens = String::Copy(S"Fourty "); break;}
                    case 5: {sTens = String::Copy(S"Fifty "); break;}
                    case 6: {sTens = String::Copy(S"Sixty "); break;}
                    case 7: {sTens = String::Copy(S"Seventy "); break;}
                    case 8: {sTens = String::Copy(S"Eighty "); break;}
                    case 9: {sTens = String::Copy(S"Ninety "); break;}
                }
                sTens = String::Concat(sTens,ConvertDigit(Right(strTens,1)));
            }
            return sTens;
        }

        String* ConvertDix(String* strTens)
        {
            String* sTens; 
            if(System::Convert::ToInt16(Left(strTens,1))==1){
                int nTens = System::Convert::ToInt16(strTens);
                switch(nTens){
                    case 10: {sTens = String::Copy(S"Dix"); break;}
                    case 11: {sTens = String::Copy(S"Onze"); break;}
                    case 12: {sTens = String::Copy(S"Douze"); break;}
                    case 13: {sTens = String::Copy(S"Treize"); break;}
                    case 14: {sTens = String::Copy(S"Quatorze"); break;}
                    case 15: {sTens = String::Copy(S"Quinze"); break;}
                    case 16: {sTens = String::Copy(S"Seize"); break;}
                    case 17: {sTens = String::Copy(S"Dix-Sept"); break;}
                    case 18: {sTens = String::Copy(S"Dix-huit"); break;}
                    case 19: {sTens = String::Copy(S"Dix-neuf"); break;}
                }
            }
            else{
                switch(System::Convert::ToInt16(Left(strTens,1))){
                    case 2: {sTens = String::Copy(S"Vingt "); break;}
                    case 3: {sTens = String::Copy(S"Trente "); break;}
                    case 4: {sTens = String::Copy(S"Quarante "); break;}
                    case 5: {sTens = String::Copy(S"Cinquante "); break;}
                    case 6: {sTens = String::Copy(S"Soixante "); break;}
                    case 7: {sTens = String::Copy(S"Soixante-dix "); break;}
                    case 8: {sTens = String::Copy(S"Quatre-vingts "); break;}
                    case 9: {sTens = String::Copy(S"Quatre-vingt-dix "); break;}
                }
                sTens = String::Concat(sTens,ConvertChiffre(Right(strTens,1)));
            }
            return sTens;
        }

        String* ConvertDigit(String* strDigit)
        {
            String* sDigit;
            int nDigit = System::Convert::ToInt16(strDigit);
            switch(nDigit){
                case 1: {sDigit = String::Copy(S"One"); break;}
                case 2: {sDigit = String::Copy(S"Two"); break;}
                case 3: {sDigit = String::Copy(S"Three"); break;}
                case 4: {sDigit = String::Copy(S"Four"); break;}
                case 5: {sDigit = String::Copy(S"Five"); break;}
                case 6: {sDigit = String::Copy(S"Six"); break;}
                case 7: {sDigit = String::Copy(S"Seven"); break;}
                case 8: {sDigit = String::Copy(S"Eight"); break;}
                case 9: {sDigit = String::Copy(S"Nine"); break;}
                default: {sDigit = String::Copy(S""); break;}
            }
            return sDigit;
        }
        
        String* ConvertChiffre(String* strDigit)
        {
            String* sDigit;
            int nDigit = System::Convert::ToInt16(strDigit);
            switch(nDigit){
                case 1: {sDigit = String::Copy(S"Un"); break;}
                case 2: {sDigit = String::Copy(S"Deux"); break;}
                case 3: {sDigit = String::Copy(S"Trois"); break;}
                case 4: {sDigit = String::Copy(S"Quatre"); break;}
                case 5: {sDigit = String::Copy(S"Cinq"); break;}
                case 6: {sDigit = String::Copy(S"Six"); break;}
                case 7: {sDigit = String::Copy(S"Sept"); break;}
                case 8: {sDigit = String::Copy(S"Huit"); break;}
                case 9: {sDigit = String::Copy(S"Neuf"); break;}
                default: {sDigit = String::Copy(S""); break;}
            }
            return sDigit;
        }
    public:
        String* ConvertCurrencyToEnglish(String* MyNumber)
        {
            String* Temp;
            String* Dollars;
            String* Cents="";
            int Count = 1, DecimalPlace;
            MyNumber = MyNumber->Trim();
            if(!IsValidNumber(MyNumber)) return S"Given number is wrong!";
            if(String::Compare(Left(MyNumber,1),".")==0)
                MyNumber = String::Concat("0",MyNumber);
            DecimalPlace = SearchStr(MyNumber,".");
            if(DecimalPlace > 0 && MyNumber->Length == DecimalPlace+1)
                MyNumber = Left(MyNumber,DecimalPlace);
            if(DecimalPlace > 0 && MyNumber->Length > DecimalPlace+1){
                Temp = Left(String::Concat(Mid(MyNumber,DecimalPlace+1,MyNumber->Length-(DecimalPlace+1)),"00"),2);
                Cents = ConvertTens(Temp);
                MyNumber = Left(MyNumber,DecimalPlace);
            }
            String* Place[] ={S"",S"",S" Thousand ",S" Million ",S" Billion ",S" Trillion "};
            while(String::Compare(MyNumber,"") != 0){
                Temp = ConvertHundreds(Right(MyNumber,3));
                if(String::Compare(Temp,"") != 0){ 
                    Dollars = String::Concat(String::Concat(Temp,Place[Count]),Dollars);
                }
                if(MyNumber->Length > 3)
                    MyNumber = Left(MyNumber,MyNumber->Length-3);
                else
                    MyNumber = "";
                Count = Count + 1;
            }
            if(String::Compare(Dollars,"")==0)
                Dollars = "No Dollars";
            else if(String::Compare(Dollars,"One")==0)
                Dollars = "One Dollar";
            else Dollars = String::Concat(Dollars," Dollars");

            if(String::Compare(Cents,"")==0)
                Cents = " And No Cents";
            else if(String::Compare(Cents,"One")==0)
                Cents = " And One Cent";
            else Cents = String::Concat(" And ",String::Concat(Cents," Cents "));

            return String::Concat(Dollars,Cents);
        }

        String* ConvertCurrencyToFrench(String* MyNumber)
        {
            String* Temp;
            String* Dollars;
            String* Cents="";
            int Count = 1, DecimalPlace;
            MyNumber = MyNumber->Trim();
            if(!IsValidNumber(MyNumber)) return S"Given number is wrong!";
            if(String::Compare(Left(MyNumber,1),".")==0)
                MyNumber = String::Concat("0",MyNumber);
            DecimalPlace = SearchStr(MyNumber,".");
            if(DecimalPlace > 0 && MyNumber->Length == DecimalPlace+1)
                MyNumber = Left(MyNumber,DecimalPlace);
            if(DecimalPlace > 0 && MyNumber->Length > DecimalPlace+1){
                Temp = Left(String::Concat(Mid(MyNumber,DecimalPlace+1,MyNumber->Length-(DecimalPlace+1)),"00"),2);
                Cents = ConvertDix(Temp);
                MyNumber = Left(MyNumber,DecimalPlace);
            }
            String* Place[] ={S"",S"",S" Mille ",S" Million ",S" Milliard ",S" Trillion "};
            while(String::Compare(MyNumber,"") != 0){
                Temp = ConvertCent(Right(MyNumber,3));
                if(String::Compare(Temp,"") != 0){ 
                    Dollars = String::Concat(String::Concat(Temp,Place[Count]),Dollars);
                }
                if(MyNumber->Length > 3)
                    MyNumber = Left(MyNumber,MyNumber->Length-3);
                else
                    MyNumber = "";
                Count = Count + 1;
            }
            if(String::Compare(Dollars,"")==0)
                Dollars = "Non Dollars";
            else if(String::Compare(Dollars,"One")==0)
                Dollars = "Un Dollar";
            else Dollars = String::Concat(Dollars," Dollars");

            if(String::Compare(Cents,"")==0)
                Cents = " et Non Cents";
            else if(String::Compare(Cents,"One")==0)
                Cents = " et Un Cent";
            else Cents = String::Concat(" et ",String::Concat(Cents," Cents "));

            return String::Concat(Dollars,Cents);
        }
    };
}
Last edited by admin II : 02-Mar-2007 at 06:33. Reason: Please surround your C++ code with [cpp] ... [/cpp]
 

Recent GIDBlogLast Week of IA Training by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 05:20.


vBulletin, Copyright © 2000 - 2008, Jelsoft Enterprises Ltd.