WeiHandsome 2024-05-22 20:18 采纳率: 85%
浏览 4
已结题

蓝桥杯练习中的问题求解答

img


麻烦大家帮忙看看这是为什么?
这个样例的结果怎么出的


#include <bits/stdc++.h>
using namespace std;
string s;

int charToInt(string str)
{
  int ret=0;
  for(int i=0;i<str.size();i++)
  {
    ret=ret*10+(str[i]-'0');
  }
  return ret;
}

int findOp()
{
  int ret;
    ret=s.find('+');
    if(ret!=-1)return ret;
    ret=s.find('-');
    if(ret!=-1)return ret;
    ret=s.find('*');
    if(ret!=-1)return ret;
    ret=s.find('/');
    if(ret!=-1)return ret;
    
    return -1;
}

int findEql()
{
    int ret=s.find('=');
    if(ret!=-1)return ret;
    
    return -1;
}

int findQes()
{
  int ret=s.find('?');
}
void judgeAdd()
{
    int addPosition=s.find('+');
    int eql=findEql();
    int x=charToInt(s.substr(0,addPosition));
    int y=charToInt(s.substr(addPosition+1,eql));
      int z=charToInt(s.substr(eql+1,s.size() )  );

    if(s[0]=='?')cout<<z-y<<endl;
    else if(s[addPosition+1]=='?')cout<<z-x<<endl;
    else if(s[eql+1]=='?')cout<<x+y<<endl;
}
void judgeSub()
{
    int subPosition=s.find('-');
    int eql=findEql();
    int x=charToInt(s.substr(0,subPosition));
    int y=charToInt(s.substr(subPosition+1,eql));
      int z=charToInt(s.substr(eql+1,s.size() )  );

    if(s[0]=='?')cout<<z+y<<endl;
    else if(s[subPosition+1]=='?')cout<<x-z<<endl;
    else if(s[eql+1]=='?')cout<<x-y<<endl;
}
void judgeMul()
{
    int mulPosition=s.find('*');
    int eql=findEql();
    int x=charToInt(s.substr(0,mulPosition));
    int y=charToInt(s.substr(mulPosition+1,eql));
      int z=charToInt(s.substr(eql+1,s.size() )  );

    if(s[0]=='?')cout<<z/y<<endl;
    else if(s[mulPosition+1]=='?')cout<<z/x<<endl;
    else if(s[eql+1]=='?')cout<<x*y<<endl;
}
void judgeDiv()
{
    int divPosition=s.find('/');
    int eql=findEql();
    int x=charToInt(s.substr(0,divPosition));
    int y=charToInt(s.substr(divPosition+1,eql));
      int z=charToInt(s.substr(eql+1,s.size() )  );
    if(s[0]=='?')cout<<"不存在唯一解"<<endl;//cout<<z-y<<endl;
    if(s[divPosition+1]=='?')cout<<"不存在唯一解"<<endl;//cout<<z-x<<endl;
    if(s[eql+1]=='?')cout<<x/y<<endl;
}

int main()
{
  cin>>s;
  int ret1=findQes();
  int ret2=findEql();

  if(findOp()==-1)//没有运算符,运算符被替换了
  {
      cout<<"没有运算符"<<endl;
    int x=charToInt(s.substr(0,ret1));
    int y=charToInt(s.substr(ret1+1,ret2));
      int z=charToInt(s.substr(ret2+1,s.size() )  );
      //cout<<ret1<<s[ret1]<<" "<<ret2<<s[ret2]<<endl; 
      //cout<<x<<" "<<y<<" "<<z<<endl;
    if( x+y==z )cout<<"+"<<endl;
    if( x-y==z )cout<<"-"<<endl;
    if( x*y==z )cout<<"*"<<endl;
    if( x/y==z )cout<<"/"<<endl;
  }

  else//有运算符,数字被替换了
  {
      cout<<"有运算符"<<endl;

    if(s.find('+')!=-1)judgeAdd();
    else if(s.find('-')!=-1)judgeSub();
    else if(s.find('*')!=-1)judgeMul();
    else if(s.find('/')!=-1)judgeDiv();//else
  }
  // 请在此输入您的代码
  return 0;
}


  • 写回答

4条回答 默认 最新

  • WeiHandsome 2024-05-25 19:22
    关注

    字符串函数substr()使用错误
    第一个参数是起始地址,第二个参数是截取的长度

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月25日
  • 创建了问题 5月22日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?