| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1536 人关注过本帖
标题:英文单词模拟数学运算问题
只看楼主 加入收藏
a18485453726
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-6-9
收藏
 问题点数:0 回复次数:0 
英文单词模拟数学运算问题

大家帮忙看下,我严格按照标准输入,但是输出不了结果,还有开头那部分char dictionary[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};为什么要那么定义,我找了好久都是这么定义
#include<stdio.h>
#include<string.h>
char dictionary[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int count(char *content)//计算函数,形参为输入的字符串,输入为A[20][20]
{
    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 '-':
           
        case '*':
        case '/':result = -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 (answer=-1)
            printf("输入格式错误,请重新输入");
        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;
}
搜索更多相关主题的帖子: content start bit i++ strcmp 
2019-06-09 17:27
快速回复:英文单词模拟数学运算问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022119 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved