1.对于一个字符串进行操作,首先输入这个字符串,判断里面是否是.运算符或者是/运算符,因为这两种运算符操作起来要读取两个数值
2.设置一个翻转数组的change函数,去除前导0
3.然后对字符串进行操作,如果这个字符串是一个整数或者是%运算符,那么从字符串a中读取一个整数,然后放到change函数里改变,再将这个数直接输出即可
4.如果是小数或者分数,那么从字符串中读取两个整数和一个字符,把两个整数放到change函数里翻转,再将这两个整数和这个字符打印到数组b中,输出数组b即可,注意,字符数组b清零
**解法1:**
```c
#include<bits/stdc++.h>
using namespace std;
string s;
char k=0;
int cnt=0;
int x;
int m;
int main()
{
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9') cnt++;
else
{
k=s[i];
break;
}
}
x=cnt;
cnt--;
while(s[cnt]=='0'&&cnt>0)
cnt--;
for(int i=cnt;i>=0;i--)
cout<<s[i];
if(k==0)
return 0;
else
if(k=='%') {cout<<k;return 0;}
else cout<<k;
m=s.size()-1;
while(s[x+1]=='0'&&x<m-1)
x++;
while(s[m]=='0' && m>x+1)
m--;
for(int i=m;i>x;i--)
cout<<s[i];
return 0;
}
```
**解法2**
```c
#include<bits/stdc++.h>
using namespace std;
long long change (long long x)
{
long long sum=0;
while(x!=0)
{
sum=sum*10+x%10;
x=x/10;
}
return sum;
}
int main()
{
char a[30],b[30];
char ans;
bool flag=0;
cin>>a;
for(int i=0;i<=strlen(a)-1;i++)//依次遍历字符串
{
if(a[i]=='.'||a[i]=='/')//如果出现了这两种字符
{
ans=a[i];
flag=1;//flag标记为1,退出循环
break;
}
}
if(flag==0)//如果是整数或者是%
{
long long num;
if(a[strlen(a)-1]=='%')//如果是%
{
sscanf(a,"%ld%",&num);//读取一个整数
cout<<change(num)<<"%";//翻转后输出这个数再输出%
}
else//如果是整数
{
sscanf(a,"%ld",&num);//读取一个整数
cout<<change(num);//翻转后直接输出
}
}
else//如果是有操作符的话
{
long long num1,num2;
sscanf(a,"%ld%c%ld",&num1,&ans,&num2);//从字符串a中读取三个值
memset(b,0,sizeof(b));//清空b数组
sprintf(b,"%ld%c%ld",change(num1),ans,change(num2));//将三个值打印到数组b中
cout<<b<<endl;//输出字符数组b
}
return 0;
}
```
**希望能关注我!!!**
by timmyliao @ 2024-01-25 15:06:28