C求助!78个点不对,求大佬帮我瞅瞅
查看原帖
C求助!78个点不对,求大佬帮我瞅瞅
478331
RenaissanceX楼主2022/10/23 16:18

本机答案和测试是一样的,会不会是因为有的数组结束没有\0的原因。

第七个点测试数据
输入1234567890.0987654321
输出987654321.123456789

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char s[21]);
int clearLeft(char a[21]);
int main()
{
    char s[21],a[21],b[21];
    int i=0,t=0,j=0,len=0,len_A,len_B,flag=1;
//    flag表示是否是整数,是整数则等于1
    gets(s);
    len =strlen(s);
    for(i=0;i<strlen(s);i++)
    {
        if(s[i]=='.')
        {
            flag=0;
            t=i;
            for(j=0;j<t;j++)
            {
                a[j] = s[j];
            }
            a[t]='\0';
            reverse(a);
            len_A = clearLeft(a);


            for(j=t+1;j<len;j++)
            {
                b[j-t-1] = s[j];
            }
            reverse(b);
            len_B = clearRight(b);


//            连接
            for(j=0;j<len_A;j++)
            {
                s[j] = a[j];
            }
            s[len_A]='.';
            for(j=len_A+1;j<len_B+len_A+1;j++)
            {
                s[j] = b[j-len_A-1];
            }
//            因为最初的如果有0肯定更长,没有清空,所以记得清空后面的数
            s[j]='\0';
            break;

        }
        else if(s[i]=='%')
        {
            flag=0;
//            去掉百分号
            s[len-1] = '\0';
            reverse(s);
            len = clearLeft(s);
            //        再加上
            s[len] = '%';
            break;
        }

        else if(s[i]=='/')
        {
            flag=0;
            t=i;
            for(j=0;j<t;j++)
            {
                a[j] = s[j];
            }
            reverse(a);
            len_A = clearLeft(a);

            for(j=t+1;j<len;j++)
            {
                b[j-t-1] = s[j];
            }
            b[j-t-1]='\0';
            reverse(b);
            len_B = clearLeft(b);

//            连接
            for(j=0;j<len_A;j++)
            {
                s[j] = a[j];
            }
            s[len_A]='/';
            for(j=len_A+1;j<len_B+len_A+1;j++)
            {
                s[j] = b[j-len_A-1];
            }
//            因为最初的如果有0肯定更长,没有清空,所以记得清空后面的数
            s[j]='\0';
            break;
        }

    }
    if(flag==1)
    {
//           翻转整数,不能直接else不然的话,遇到整数就翻转一次
        reverse(s);
        clearLeft(s);
    }


    printf("%s\n",s);






    return 0;
}

void reverse(char s[21])
{
    char temp[21];
    int len = strlen(s);
    for(int i=0;i<len;i++)
    {
//        注意数组越界
        temp[i]= s[len-i-1];
    }
    for(int i=0;i<len;i++)
    {
        s[i] = temp[i];
    }
}

//清楚右边的0
int clearRight(char b[21])
{
    int i,len,cot=0,len_B;
    len = strlen(b);
    // 如果右边只有0,保留一个
    for(i=len-1;i>=0;i--)
    {
        if(b[i]!='0')
        {
            break;
        }
        else
        {
            cot++;
        }
    }
    if(cot == len)
    {
        b[0] = '0';
        b[1] = '\0';
    }
//         如果翻转后后面带0
    else
    {
        for(i=0;i<len-cot;i++)
        {
            b[i] = b[i];
        }
        b[i] = '\0';
    }
    len_B = strlen(b);
    return len_B;
}
int clearLeft(char a[21])
{
    int i=0,cot=0,len_A;
    int len =0;
    len = strlen(a);
    //如果第一位是0
    for(i=0;i<len;i++)
    {
        if(a[i]!='0')
        {
            break;
        }
        else
        {
//计算0的个数
            cot++;
        }
    }
    if(cot == len)
    {
        a[0] = '0';
        a[1] = '\0';
    }
    else
    {
//        去掉左边的0
        for(i=0;i<len;i++)
        {
            a[i] = a[i+cot];
        }
    }
    len_A = strlen(a);
    return len_A;
}


2022/10/23 16:18
加载中...