HDU2054 A==B------ [NWPU][2018寒假作业][通用版]一、热身 [Cloned]Y题

Give you two numbers A and B, if A is equal to B, you should print “YES”, or print “NO”.
Input
each test case contains two numbers A and B.
Output
for each case, if A is equal to B, you should print “YES”, or print “NO”.
Sample Input
1 2
2 2
3 3
4 3
Sample Output
NO
YES
YES
NO

解题思路:
一开始我以为这是一道水题,后来发现其实是一个大坑。
因为题目中对数字A和B没有限制,可能有几千位、几万位那么长,所以要用字符串类型。
因为可能会出现如3.5000000这样的后置0和00000003.5这样的前置0,所以要用str.erase函数删除无效的0。像3.000000这种情况还需要删除无效的小数点。
除了上面这些普通情况之外,还有00000.000000这样的特殊情况,需要保留一个0。
如果不加入strchr函数判断字符串中是否有小数点,则会把200000中的0也都删去。
总而言之,这道题需要判断哪些是有效的0和小数点哪些是无效的0和小数点,以及如何删去它们。

但是我到现在还没搞明白str.erase(0)和str.erase(0,1)的区别?

strchr(str.c_str(),’.’)
str.c_str()函数:
返回当前字符串的首字符地址。
strchr函数:
char strchr(const char _Str,char _Val)
char strchr(char _Str,char _Ch)
头文件:string.h
功能:查找字符串_Str中首次出现字符_Val的位置
说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL

int fun(String& str)中的&表示引用运算符。fun函数表示的是通过引用来进行实参于形参的传递。
引用就是某一变量(对象)的一个别名,对引用的操作与对变量直接操作完全一样。

#include<iostream>
#include<string>
#include<string.h>

using namespace std;

void change(string &str);

int main()
{
    string a,b;
    while(cin>>a>>b)
    {
        change(a);
        change(b);
        if(a.compare(b)==0) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

void change(string &str)
{
    int last=str.length()-1;
    if(strchr(str.c_str(),'.'))
    //如果字符串中有小数点,需要删除末尾0
    //没有小数点的字符串,只需要考虑前置0
    {
        while(str[last]=='0')//删除末尾无效的0
        {
            str.erase(last);
            last--;
        }
        if(str[last]=='.')
        //如果删除完无效0后末尾只剩一个.
        //证明小数点无效,删除
        {
            str.erase(last);
        }
    }
    while(str[0]=='0'&&str.length()>1)
    //给000.000类型的数留一个0
    {
        str.erase(0,1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值