本机答案和测试是一样的,会不会是因为有的数组结束没有\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;
}