只需要判断历史字符串中对应的应该用1还是0来表示就解决问题。
1.接受输入的可以是字符数组(char[])也可以是字符串(string);
2.判断是字母或者数字的时候要用&&而不能用连续不等号,这是出错点;
3.相除的时候保证是float型,就要确保运算的过程有float型的变量或者常量参与运算;
4.保留小数位数;
#include <iostream>
#include "string.h"
#include<iomanip>
using namespace std;
int main()
{
char hisStr[1000];
char startStr[1000];
float total = 0, right = 0;
cin >> hisStr;
cin >> startStr;
for(int i=0;hisStr[i] != '\0';i++)
{
total++;
if ((47 < hisStr[i]&& hisStr[i] < 58) || (64 < hisStr[i]&& hisStr[i] < 91) || (96 < hisStr[i]&& hisStr[i] < 123))
{
if(startStr[i] == '1') right++;
}
else
{
if (startStr[i] == '0') right++;
}
}
float rightRate = right / total;
cout << setiosflags(ios::fixed) << setprecision(2) << rightRate*100.0 << "%"<< endl;
return 0;
}
该代码需要改进的地方是,其中的小方法可以封装成函数的形式,比如判断数字和字母,比如判断是否为right。