【发布时间】:2018-06-25 20:21:26
【问题描述】:
“编写一个程序,读取用户输入并以句点 ('.') 终止的字符序列。您的程序应允许用户通过按回车键输入多行输入每行的结尾。程序应该打印出一个频率表,按出现次数降序排列,列出出现的每个字母及其出现的次数。必须忽略所有非字母字符。输入的任何字符在句点 ('.') 之后应留在输入流中未处理。不能对输入的长度设置任何限制。"
我不知道从哪里开始。到目前为止,这是我想出的:
#include<iostream>
using namespace std;
int main(){
int count=0;
char ch[count];
int i=0;
cout<<"Enter a sequence of characters (end with '.'): ";
cin>>ch[count];
while(ch[count]!='.')
{
count++;
cin>>ch[count];
}
cout<<"There were "<<count<<" characters in the string"<<endl;
return 0;
}
现在程序接受用户输入并显示其中的字符数,但我无法让它显示任何字符,更不用说按降序排列了。排序不是我的问题,我完全理解如何编程,但我无法显示存储在输入流中的字符。
我的导师建议我们使用结构,但现在我只需要一些指导。输出格式应如下:
Enter a sequence of characters (end with '.'): do be Do bo. xyz
Letter: Number of Occurrences
o 3
d 2
b 2
e 1
我不是要求任何人为我编写代码,我只是需要帮助了解从哪里开始,以及如何让字符显示。我们不能使用字符串类,因此不能使用除strlen()之外的任何字符串函数。
【问题讨论】:
-
有人可以批准编辑吗
-
如果它编译,那么
ch的长度为0。访问这个数组总是会导致未定义的行为。 -
听起来你想将输入读入容器(如
std::vector),然后std::sort容器。然后遍历已排序的容器并将其内容打印到std::cout。或类似的。 -
如果你不能使用
std::sort那么也许只是实现冒泡排序?它非常效率低下,但实施起来很简单。 -
@Sharad Khanna 和我大体上同意。大多数家庭作业问题只是作为作业的转储和我们实施解决方案的请求发布。我反对并投票结束这些问题。但这是不同的,因为 OP 实际上已经进行了尝试。这比大多数人都多。
标签: c++ struct find-occurrences