1. 程式人生 > >“字串碎片”之c++中輸出小數點後指定位數

“字串碎片”之c++中輸出小數點後指定位數

題目 字串碎片

一個由小寫字母組成的字串可以看成一些同一字母的最大碎片組成的。例如,"aaabbaaac"是由下面碎片組成的:'aaa','bb','c'。牛牛現在給定一個字串,請你幫助計算這個字串的所有碎片的平均長度是多少。

輸入描述:

輸入包括一個字串s,字串s的長度length(1 ≤ length ≤ 50),s只含小寫字母('a'-'z')


輸出描述:

輸出一個整數,表示所有碎片的平均長度,四捨五入保留兩位小數。

如樣例所示: s = "aaabbaaac"
所有碎片的平均長度 = (3 + 2 + 3 + 1) / 4 = 2.25

輸入例子1:

aaabbaaac

輸出例子1:

2.25


分析

1.數出字串中碎片個數,可以首先用string中length()得到字串長度,然後遍歷每個字元,判斷每相鄰兩個字元是否相同,進而得到碎片個數;
        lengthstr = (float)str.length();
	for (int i = 0; i<lengthstr-1; i++) {
		if (str[i] != str[i + 1])
			temp++;
	}
2.輸出兩位小數 可以有很多方法:(1)c語言中的printf()函式的格式化輸出;(2)c++中fixed【浮點數以小數形式輸出】與setprecision(n)【n為保留小數位數】組合使用;(3)自己寫四捨五入演算法函式。
(1)
printf("%0.2f",n);
(2) 注意此處,必須新增標頭檔案 #include<iomanip>
cout<<fixed<<setprecision(2)<< n << endl;
/*或者
cout.setf(ios::fixed);
cout<<setprecision(2)<< n << endl;*/
(3) 本人愚鈍,此處附上其他大佬的想法

程式碼

#include<iostream>
#include<string>
#include<iomanip>
#include"cmath"
using namespace std;

float f1(string str)
{
	float lengthstr;                   //此處均定義為浮點數
	float temp = 1.0;                   //若為int型則lengthstr/temp為取整
	lengthstr = (float)str.length();
	for (int i = 0; i<lengthstr-1; i++) {
		if (str[i] != str[i + 1])
			temp++;
	}
	return lengthstr/temp;
}

int main() {
	string res;
	cin >> res;
	float n = f1(res);
	cout.setf(ios::fixed);               //此處可以替換
	cout<<setprecision(2)<< n << endl;
	return 0;
}