|
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
#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]
|