一个数字小写转大写的程序
一个数字小写转大写的程序 //程序编译通过,可惜没有出结果,多指正
#include
#include
#include
bool ChgLowerToUpper(int ivalue, char *svalue); void GetUpperFromLower(int ival, char *supp); bool GetHandreUpper(int ivalue, char *svalue); bool GetThousandUpper(int ivalue, char *svalue); bool GetAllUpper(int ivalue, char *svalue); int main(int argc, char ** argv)
{
if(argc != 2)
{
perror("num of paramter is error!\n");
return 1;
}
char * strvar = *(argv + 1);
int value = atoi(strvar);
char * strvalue = "";
if(ChgLowerToUpper(value,strvalue))
{
printf("%d = %s\n", value, strvalue);
return 0;
}
return 1;
}
bool ChgLowerToUpper(int ivalue, char *svalue) {
printf("ChgLowerToUpper\n");
printf("ivalue = [%2d]\n", ivalue);
svalue = "";
//分阶段考虑
if(ivalue == 0)
{
GetUpperFromLower(ivalue,svalue);
}
else if((ivalue > 0)&&(ivalue < 10000))
{
GetHandreUpper(ivalue,svalue);
}
else if(ivalue == 10000)
{
GetUpperFromLower(1,svalue);
strcat(svalue, "万");
}
else if((ivalue > 10000)&&( ivalue < 100000000))
{
GetThousandUpper(ivalue,svalue);
}
else if(ivalue == 100000000)
{
GetUpperFromLower(1,svalue);
strcat(svalue, "亿");
}
else if((ivalue > 100000000)&&(ivalue <= 2000000000))
{
GetAllUpper(ivalue,svalue);
}
else
return false;
return true;
}
//基础数据
void GetUpperFromLower(int ival, char *supp)
{
printf("GetUpperFromLower\n");
printf("ival = [%2d]", ival);
switch(ival)
{
case 0:
supp = "零";
break;
case 1:
supp = "壹";
break;
case 2:
supp = "贰";
break;
case 3:
supp = "叁";
break;
case 4:
supp = "肆";
break;
case 5:
supp = "伍";
break;
case 6:
supp = "陆";
break;
case 7:
supp = "柒";
break;
case 8:
supp = "捌";
break;
case 9:
supp = "玖";
break;
default:
supp = "";
break;
}
}
//转换万以下的
bool GetHandreUpper(int ivalue, char *svalue)
{
printf("GetHandreUpper\n");
printf("ivalue = [%2d]\n", ivalue);
int i = 0;
char *temp = "";
int flag = 0;
//处理千位
i = ivalue/1000;
if(i != 0)
{
GetUpperFromLower(i,temp);
svalue = strcat(temp, "仟");
printf("temp = [%s]\n", temp);
}
ivalue %= 1000;
//处理百位
i = ivalue/100;
if(i != 0)
{
GetUpperFromLower(i,temp);
svalue = strcat(temp, "佰");
}
else if((i == 0)&&(!strlen(svalue)))
{
i = ivalue%100;
if(i == 0) return true;
else
{
svalue = strcat(svalue, "零");
flag++;
}
}
ivalue %= 100;
//处理十位
i = ivalue/10;
if(i != 0)
{
GetUpperFromLower(i,temp);
svalue = strcat(temp, "拾");
}
else if((i == 0)&&(!strlen(svalue)))
{
i = ivalue%10;
if(i == 0) return true;
else
{
if(flag == 0)
svalue = strcat(svalue, "零");
}
}
ivalue %= 10;
//处理个位
i = ivalue;
if(i != 0)
{
GetUpperFromLower(i,temp);
svalue = strcat(svalue, temp);
}
return true;
}
//转换万以上,亿以下
bool GetThousandUpper(int ivalue, char *svalue)
{
printf("GetThousandUpper\n");
printf("ivalue = [%2d]\n", ivalue);
int i = 0,value = 0;
char *temp = "",*stemp = "";
int flag = 0;
svalue = "";
value = ivalue/10000;
GetHandreUpper(value,temp);
temp = strcat(temp, "万");
ivalue %= 10000;
if(ivalue == 0)
{
svalue = temp;
return true;
}
else
{
if(ivalue < 1000) temp = strcat(temp, "零");
GetHandreUpper(ivalue,stemp);
}
svalue = strcat(temp, stemp);
return true;
}
//最大数字转换
bool GetAllUpper(int ivalue, char *svalue) {
printf("GetAllUpper\n");
printf("ivalue = [%2d]\n", ivalue);
int i = 0,value = 0;
char *temp = "", *stemp = "";
int flag = 0;
svalue = "";
value = ivalue/100000000;//转换亿以上的数字
GetHandreUpper(value,temp);
temp = strcat(temp, "亿");
ivalue %= 100000000;//转换亿以下的数字
if(ivalue == 0)
{
svalue = temp;
return true;
}
else if(ivalue < 10000)
{
if(ivalue < 1000) temp = strcat(temp, "零");
GetHandreUpper(ivalue,stemp);
}
else if(ivalue == 10000)
{
GetUpperFromLower(1,stemp);
stemp = strcat(stemp, "万");
}
else
{
if((ivalue < 10000000)&&(ivalue > 10000)) temp = strcat(temp, "
零");
GetThousandUpper(ivalue,stemp);
}
svalue = strcat(temp, stemp);
return true;
}