Words 重量
题目描述:
每个句子由多个单词组成,句子中的每个单词的长度都可能不一样, 我们假设每个单词的长度 LW 为该单词
的重量,请给出整个句子的平均重量 V。
输入描述:
输入只有一行,包含一个字符串 S(长度不会超过 100),代表整个句子,句子中只包含大小写的英文字母
(不包含标点符号),每个单词之间有一个空格。
输出描述:
输出 S 的平均重量 V(每个单词的长度之和 / 单词个数)(四舍五入保留两位小数)。
示例 1
输入:Who Love Mate
输出:3.67
#include <iostream>
#include <string>
using namespace std;
bool IsSeparator(char ch); //判断一个字符是不是分隔符(空格、逗号,句号)
int CharCount(string str); //计算句子中字母数的函数
int WordCount(string sentence); //计算句子中单词个数的函数
int main(int argc, char** argv) {
string sentence;
getline(cin, sentence);
int letterNum = CharCount(sentence);
int wordNum = WordCount(sentence);
cout << letterNum * 1.0 / wordNum;
return 0;
}
int WordCount(string sentence) {
int wordNum = 0;
int len = sentence.length();
int i = 0;
while (true)
{
//如果是分隔符,就跳过
if (IsSeparator(sentence[i]))
{
while (i <= len - 1 && IsSeparator(sentence[i]))
{
i++;
}
}
//如果不是分隔符,就说明遇到单词,wordNum++,然后逐步跳过该单词
else if (!IsSeparator(sentence[i]))
{
wordNum++;
while (i <= len - 1 && !IsSeparator(sentence[i]))
{
i++;
}
}
if (i > len - 1)
{
break;
}
}
return wordNum;
}
bool IsSeparator(char ch) {
if (ch == ' ' || ch == ',' || ch == '.')
return true;
return false;
}
int CharCount(string str) {
int len = str.length();
int cnt = 0;
for (int i = 0; i < len; i++)
{
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
{
cnt++;
}
}
return cnt;
}
其实不用搞这么多花里胡哨的直接搞定也行:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
string str = "";
while (getline(cin, str)) {
size_t N = str.size();
int countspace = 0;
double ans = 0;
for (size_t i = 0; i < N; ++i) {
if (str[i] == ' ') countspace++;
}
ans = 1.0*(N - countspace) / (1.0*(countspace + 1));
cout << ans << endl;
}
return 0;
}