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

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

#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条回答 默认 最新

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

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常