【发布时间】:2020-03-06 05:41:18
【问题描述】:
编写一个程序,读取一行文本并输出该行中的单词数和每个字母出现的次数。将单词定义为在每一端由空格、句点、逗号或行首或行尾分隔的任何字母字符串。您可以假设输入完全由字母、空格、逗号和句点组成。输出一行中出现的字母数时,一定要将一个字母的大写和小写版本算作同一个字母。按字母顺序输出字母并仅列出输入行中出现的字母。例如,输入线 我说嗨。 应该产生类似于以下的输出: 3 个字 1个 1小时 2我 1 秒 1 年
#include<iostream>
#include<cstring>
#include<cctype>
using namespace std;
int main()
{
string input;
cout<<"Enter a sentence: ";
getline(cin,input);
int count[26] = {0},i,wordCount=0;
for(i = 0; i< input.size();i++){
if(((input[i]>='a' && input[i] <= 'z')||(input[i]>='A' && input[i] <= 'Z'))&&(input[i+1]=='.'||input[i+1]
==','||input[i+1]=='\0'))
wordCount++;
if(input[i]>='a' && input[i] <= 'z')
count[input[i]-'a']++;
if(input[i]>='A' && input[i] <= 'Z')
count[input[i]-'A']++;
}
char x = input[input.size()-1];
if(x != '.' && x != 'z' && x!= '\0')
wordCount++;
cout<<endl<<wordCount<<" words "<<endl;
for(i=0; i<26; i++)
{
if(count[i]>0)
cout<<count[i]<<" "<<(char)('a'+i)<<endl;
}
}
例如,它会运行所有内容,但会打印错误的字号。 示例:输入句子:我很困惑,请帮助
2 个字 2个 1摄氏度 1天 4e 1 英尺 1小时 1 我 2升 1米 1个 1个 2个 2 秒 1个
【问题讨论】:
-
为什么不使用
isupper()和islower()而使用#include <cctype>? -
if(((input[i]>='a' && input[i] <= 'z')||(input[i]>='A' && input[i] <= 'Z'))&&(input[i+1]=='.'||input[i+1] ==','||input[i+1]=='\0'))你忘了检查空格作为单词分隔符。
标签: c++