qq_24795251 2014-12-24 07:11 采纳率: 0%
浏览 1729

C/C++转换问题,如何有效的转换?

#include
#include
char dictionary[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
//读取工作完全按照题目要求中给出的格式进行,要求输入序列严格按照格式!
//例:one + eight = 和 one two + three =
int count(char content)//计算函数,形参为输入的字符串
{
char A1[10],A2[10],oper,B1[10],B2[10]; //第一个数的十位、个位、运算符、第二个数的十位、个位
int i; //遍历输入的字符串
int start; //起始位置
int bit[2]; //对应的数字,0:第一个数字,1:第二个数字
int result; //存储计算结果
int flag[2]={0,0}; //标记两个数的位数,0:1位数,1:两位数,初始化为个位数
for(i=0,start=0;
(content+i)!=' ';i++,start++) //读取第一个运算符的个位(也可能是十位)
{
A1[start] = (content+i);
}
A1[start]='\0';
if(
(content+i+1)!='+'&&*(content+i+1)!='-'&&*(content+i+1)!='*'&&*(content+i+1)!='/')//若后边的字母不是'+''-''*''/'符号则说明刚才读的是十位,则继续读取第一个数的个位
{
flag[0] = 1; //第一个数标记为十位数
for(i++,start=0;*(content+i)!=' ';i++,start++)
{
A2[start] = *(content+i);
}
A2[start]='\0'; //最后一个位置赋结束符,下同
}

oper = *(content+i+1);    //此时oper读到的一定是运算符(例one three + four =)
i+=3;       //跳到运算符后的第一个字母处

for(start=0;*(content+i)!=' ';i++,start++) 
{
    B1[start] = *(content+i);
}
B1[start]='\0';
if(*(content+i+1)!='=')     //若后边的字母不是‘=’号则说明刚才读的是十位数,则继续读取第二个数的个位
{
    flag[1] = 1;  //第二个数标记为十位数
    for(i++,start=0;*(content+i)!=' ';i++,start++) 
    {
        B2[start] = *(content+i);
    }
    B2[start]='\0';
}

//下面开始转化为对应的数字
if(0==flag[0]&&0==flag[1])//都是一位数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i;
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i;
}
}
}
else if(1==flag[0]&&0==flag[1])//一位数和二位数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i*10; //第一个数的十位
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i; //第二个数的个位(是一位数,不考虑十位)
}
}

    for(i=0;i<10;i++)
    {
        if(!strcmp(dictionary[i],A2)) 
        {
            bit[0]+=i;//第一个数再加上个位
        }
    }
}
else if(0==flag[0]&&1==flag[1])//二位数和一位数的情况
{
    for(i=0;i<10;i++)
    {
        if(!strcmp(dictionary[i],A1)) 
        {
            bit[0]=i; //第一个数的个位(是一位数,不考虑十位)
        }
        if(!strcmp(dictionary[i],B1)) 
        {
            bit[1]=i*10; //第二个数的十位
        }
    }
    for(i=0;i<10;i++)
    {
        if(!strcmp(dictionary[i],B2)) 
        {
            bit[1]+=i;//第二个数再加上个位
        }
    }
}
else if(1==flag[0]&&1==flag[1])//都是二位数的情况
{
    for(i=0;i<10;i++)
    {
        if(!strcmp(dictionary[i],A1)) 
        {
            bit[0]=i*10;
        }
        if(!strcmp(dictionary[i],B1)) 
        {
            bit[1]=i*10;
        }
    }

    for(i=0;i<10;i++)
    {
        if(!strcmp(dictionary[i],A2)) 
        {
            bit[0]+=i;
        }
        if(!strcmp(dictionary[i],B2)) 
        {
            bit[1]+=i;
        }
    }
}
switch(oper)//检查运算符,进行计算
{
    case '+':result = bit[0] + bit[1];break;
    case '-':
        result = bit[0] - bit[1];
        if(result<0)
        {
            result = - result; //这里处理了一下减法出负数的情况,直接取正的了
        }break;
    case '*':result = bit[0] * bit[1];break;
    case '/':result = bit[0] / bit[1];break;
    default:result = bit[0] + bit[1];   //默认为加
}
return result;

}

int isZero(char *str)//检查输入是否为两个zero
{
int i;
char t[2][5];
for(i=0;i<4;i++)
{
t[0][i] = *(str+i);
t[1][i] = *(str+i+7);
}
t[0][i]=t[1][i]='\0';
if(!strcmp(t[0],"zero")&&!strcmp(t[1],"zero")) return 1;
else return 0;
}

int main()
{
char A[20][20];//输入的字符串,设置为最多20个,可以改
int answer;//运算存储结果
int num = -1,i;
char a='+';
do
{
gets(A[++num]);
}while(!isZero(A[num]));//输入的两个数为zero则结束输入
for(i=0;i<num;i++)
{
answer = count(A[i]);
if(0==answer/10) printf("%s\n",dictionary[answer]);
else if(0==answer/100) printf("%s %s\n",dictionary[answer/10],dictionary[answer%10]);
else printf("%s %s %s\n",dictionary[answer/100],dictionary[answer/10%10],dictionary[answer%10]);
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • oyljerry 2014-12-25 06:19
    关注

    像这种逻辑计算代码,C++基本上就跟C一样的

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题