與正確輸出不相符(line:1)
您的答案為: 壹萬貳仟參佰肆拾伍萬貳仟參佰 ...略
正確答案為: 壹萬貳仟參佰肆拾伍
我自己有試過
若輸入多筆資料
輸出也沒問題.也有換行
可以請各位幫我看一下嗎?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_TEXT 20
struct chinese_num{
char num[3];
};
struct chinese_num Stack[MAX_TEXT];
int Top = -1;
void Push(char Digit);
void PutTen(int difference);
int CheckContinueZero(char* Str, int Now, int StrLen);
void ConvertText(char* Str, int StrLen);
int main(void){
char** Text;
int i;
int j;
int Text_Len = 0;
int k;
Text = (char**) malloc(sizeof(char *));
Text[0] = (char*) malloc(sizeof(char **));
for(i = 1; gets(Text[i-1]) != NULL; ++i){
Text = (char **) realloc(Text, sizeof(char *) * (i + 1));
Text[i] = (char *) malloc(sizeof(char **));
}
for(j = 0; j < (i -1); ++j, Top = -1){
Text_Len = strlen(Text[j]);
ConvertText(Text[j], Text_Len);
for(k = 0; k <= Top; ++k){
printf("%s", Stack[k].num);
}
printf("\n");
}
return 0;
}
void Push(char Digit){
switch(Digit){
case '1': strcpy(Stack[++Top].num, "壹");
break;
case '2': strcpy(Stack[++Top].num, "貳");
break;
case '3': strcpy(Stack[++Top].num, "參");
break;
case '4': strcpy(Stack[++Top].num, "肆");
break;
case '5': strcpy(Stack[++Top].num, "伍");
break;
case '6': strcpy(Stack[++Top].num, "陸");
break;
case '7': strcpy(Stack[++Top].num, "柒");
break;
case '8': strcpy(Stack[++Top].num, "捌");
break;
case '9': strcpy(Stack[++Top].num, "玖");
break;
case '0': if(strcmp(Stack[Top].num, "零") != 0){
strcpy(Stack[++Top].num, "零");
}
break;
}
}
void PutTen(int difference){
switch(difference){
case 1: strcpy(Stack[++Top].num, "拾");
break;
case 2: strcpy(Stack[++Top].num, "佰");
break;
case 3: strcpy(Stack[++Top].num, "仟");
break;
}
}
int CheckContinueZero(char* Str, int Now, int StrLen){
int i;
for(i = Now; i < StrLen; ++i){
if(Str[i] == '0')
continue;
else
break;
}
if(i == StrLen)
return 1;
else
return 0;
}
void ConvertText(char* Str, int StrLen){
int NowDigit = 0;
int Difference = 0;
for(; NowDigit < StrLen; ++NowDigit){
if((StrLen-NowDigit) >= 9){
Difference = StrLen - NowDigit - 9;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
if(Difference == 0){
strcpy(Stack[++Top].num, "億");
}
}
else if((StrLen-NowDigit) < 9 && (StrLen-NowDigit) >=5){
Difference = StrLen - NowDigit - 5;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
if(Difference == 0){
strcpy(Stack[++Top].num, "萬");
}
}
else if((StrLen-NowDigit) > 0){
Difference = StrLen - NowDigit - 1;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
}
}
}
與正確輸出不相符(line:1)
您的答案為: 壹萬貳仟參佰肆拾伍萬貳仟參佰 ...略
正確答案為: 壹萬貳仟參佰肆拾伍
我自己有試過
若輸入多筆資料
輸出也沒問題.也有換行
可以請各位幫我看一下嗎?
#include
#include
#include
#define MAX_TEXT 20
struct chinese_num{
char num[3];
};
struct chinese_num Stack[MAX_TEXT];
int Top = -1;
void Push(char Digit);
void PutTen(int difference);
int CheckContinueZero(char* Str, int Now, int StrLen);
void ConvertText(char* Str, int StrLen);
int main(void){
char** Text;
int i;
int j;
int Text_Len = 0;
int k;
Text = (char**) malloc(sizeof(char *));
Text[0] = (char*) malloc(sizeof(char **));
for(i = 1; gets(Text[i-1]) != NULL; ++i){
Text = (char **) realloc(Text, sizeof(char *) * (i + 1));
Text[i] = (char *) malloc(sizeof(char **));
}
for(j = 0; j < (i -1); ++j, Top = -1){
Text_Len = strlen(Text[j]);
ConvertText(Text[j], Text_Len);
for(k = 0; k <= Top; ++k){
printf("%s", Stack[k].num);
}
printf("\n");
}
return 0;
}
void Push(char Digit){
switch(Digit){
case '1': strcpy(Stack[++Top].num, "壹");
break;
case '2': strcpy(Stack[++Top].num, "貳");
break;
case '3': strcpy(Stack[++Top].num, "參");
break;
case '4': strcpy(Stack[++Top].num, "肆");
break;
case '5': strcpy(Stack[++Top].num, "伍");
break;
case '6': strcpy(Stack[++Top].num, "陸");
break;
case '7': strcpy(Stack[++Top].num, "柒");
break;
case '8': strcpy(Stack[++Top].num, "捌");
break;
case '9': strcpy(Stack[++Top].num, "玖");
break;
case '0': if(strcmp(Stack[Top].num, "零") != 0){
strcpy(Stack[++Top].num, "零");
}
break;
}
}
void PutTen(int difference){
switch(difference){
case 1: strcpy(Stack[++Top].num, "拾");
break;
case 2: strcpy(Stack[++Top].num, "佰");
break;
case 3: strcpy(Stack[++Top].num, "仟");
break;
}
}
int CheckContinueZero(char* Str, int Now, int StrLen){
int i;
for(i = Now; i < StrLen; ++i){
if(Str[i] == '0')
continue;
else
break;
}
if(i == StrLen)
return 1;
else
return 0;
}
void ConvertText(char* Str, int StrLen){
int NowDigit = 0;
int Difference = 0;
for(; NowDigit < StrLen; ++NowDigit){
if((StrLen-NowDigit) >= 9){
Difference = StrLen - NowDigit - 9;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
if(Difference == 0){
strcpy(Stack[++Top].num, "億");
}
}
else if((StrLen-NowDigit) < 9 && (StrLen-NowDigit) >=5){
Difference = StrLen - NowDigit - 5;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
if(Difference == 0){
strcpy(Stack[++Top].num, "萬");
}
}
else if((StrLen-NowDigit) > 0){
Difference = StrLen - NowDigit - 1;
if(CheckContinueZero(Str,NowDigit,StrLen))
break;
else
Push(Str[NowDigit]);
if(Str[NowDigit] != '0'){
PutTen(Difference);
}
}
}
}
你把存中文字陣列的大小改成4,不要用3
我存中文字用二維陣列,之前也有這個問題
改成4後就好了.........