ZEKEGU1997 2020-01-22 16:16 采纳率: 0%
浏览 726
已采纳

字符串下标超出范围,哪里出了问题呢

#include <iostream>
#include<cstdio>
#include<string>
#include <algorithm>
using namespace std;

void inverse1(string &a)
{//用于翻转整数部分
    int n =a.length();
    int i=0;
    char b;
    while (a[n - 1] == '0'&&n!=1)
    {
        a.erase(n - 1, n);
        n--;
    }
    reverse(a.begin(), a.end());
}

void inverse2(string &a)
{//用于翻转小数部分
    int n = a.length();
    int i = 0;
    char b;
    while (a[0] == '0'&&n!=1)
    {
        a.erase(0, 1);
        n--;
    }
    reverse(a.begin(), a.end());
}

int judge(string x,int l)
{//判断是整数,小数,百分数,分数
    int i=0;
    while (i<l)
    {
        if (x[i] == '.')
            return 1;
        else if (x[i] == '%')
            return 2;
        else if (x[i] == '/')
            return 3;
        i++;
    }
    return 4;
}

int main()
{
    string x,a,b;
    int i = 0,j=0;
    getline(cin,x);
    int l = x.length();
    switch (judge(x,l))
    {
    case 1:
        while (x[i] != '.')
        {
            a[i] = x[i];
            i++;
        }//提取整数部分
        i++;
        while ((i+j)<l)
        {
            b[j] = x[i+j];
            j++;
        }//提取小数部分
        inverse1(a);
        inverse2(b);
        cout << a << '.' << b << endl;
        break;

    case 2:
        while (x[i] != '%')
        {
            a[i] = x[i];
            i++;
        }
        inverse1(a);
        cout << a << '%' << endl;
        break;

    case 3:
        while (x[i] != '/')
        {
            a[i] = x[i];
            i++;
        }
        i++;
        while ((i + j) < l)
        {
            b[j] = x[i + j];
            j++;
        }
        inverse1(a);
        inverse1(b);
        cout << a << '/' << b << endl;
        break;

    case 4:
        inverse1(x);
        cout << x << endl;
        break;
    }
    return 0;
}

题目如下:
这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。

  • 写回答

1条回答

  • 关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示