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

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

#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 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法