1. 程式人生 > >字元識別(字串處理)

字元識別(字串處理)

描述:

中南林業科技大學計算機與資訊工程學院某位老師開發一個字元識別程式. 這個程式用來將紙質文件轉換為電子版. 很顯然, 這個轉換過程不能保證100%正確, 其中有些字元不能識別. 你的任務是寫一個程式幫助這位老師計算識別的效率. 識別的效率用公式R/A進行計算,其中R表示被成功識別的字元總數, A表示識別的字元總數. 行尾字元(即換行符)不作為字元看待。 

輸入:

輸入包含幾個測試資料。輸入檔案的第一行為一個整數N,表示測試資料有N組,每一組測試資料至少有一行經字元識別程式處理過的字串, 其中沒有被成功識別的字元用”#”表示, 每一組測試資料後面都有一個空行(最後一個測試資料也不例外), 其它的行不會為空. 每一行不會超過100個字元。 


輸出:

對於每組測試資料,輸出一行, 這行包含一個語句” Efficiency ratio is X%.”, 其中X表示識別效率的百分比, 採用四捨五入的方式,並且保留小數點後1位小數(即精確到0.1%)。 

樣例輸入:

3
Pr#nt ex##tly one##ine for#eac# te#t c#se.

None.

The i#put consists of
N test ca#es. The number
of th#m (N) is given on
the first #ine
of the#input#file.



樣例輸出:

Efficiency ratio is 78.6%.
Efficiency ratio is 100.0%.
Efficiency ratio is 94.0%.


#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
	int n;
	string str;
	scanf("%d",&n);
	getchar();
	for(int i=1;i<=n;i++)
	{
		int all=0,wa=0;
		while(getline(cin,str))
		{
			int len=str.length();
			if(len==0)											//判斷輸入的是否為空行 
			break;
			all+=len;
			for(int i=0;i<len;i++)
			{
				if(str[i]=='#')
				wa++;											//記錄未被識別的字元 
			}
		}
		double p=(all-wa)*1.0/all*100;
		printf("Efficiency ratio is %.1f%%.\n",p);
	}
	return 0;
}