L1-017 到底有多二 (15 point(s))
-
cnt 写的时候又忘记初始化了,所以又记一次,不需要 cin 输入读取的变量一概都需要初始化。
-
erase() 忘记怎么写了,开始还以为是 erase('-') 但报了一个异常。
所以看了别人的说明,发现 erase() 函数对 string 来说有两种使用方式,一个是传入一个指向删除元素的迭代器,第二个是指定删除范围的区间。第二种可以用传入下标或者传入迭代器地址,来指定范围。
除了 erase() 函数外,想起来插入函数 insert() 如果往字符串里面插入也会用到类似的方法。传入函数的第一第二个参数是 pos len 位置和长度。
-
发现 % 不需要加反斜杠。刚开始还以为这是个转义字符,查了下真正的转义字符有这几个。
#include <bits/stdc++.h>
using namespace std;
int main(){
double multi = 1, cnt = 0;
string str;
cin >> str;
if(str[0] == '-'){
multi *= 1.5;
// 变为正数
str.erase(0, 1);
}
if(str[str.size() - 1] % 2 == 0) multi *= 2;
for(auto s: str)
if(s == '2')
cnt++;
cout << fixed << setprecision(2) << cnt * multi / str.size() * 100 << "%";
}