我是一名CS学生,从事c ++项目。我们被指示去声明一个结构,并使用它来读取字符数组,并保持该字符串中使用多少个字母的计数。我们不允许使用字符串。它必须是我们声明的结构的数组。 输入的时间必须与用户所需的时间相同。该代码必须能够接受新的输入行并以“。”终止。 我真的在这里挣扎。我什至不知道从哪里开始。我已经将一些代码汇总为最佳方法,但是在按“”之后它会崩溃。然后输入,我不知道为什么。
//declare struct
struct data
{
int tally = 0;
char letter;
};
//size of string to read in at a time
const int SIZE_OF_CHUNK = 11;
int main()
{
//input chunk of struct
data input[SIZE_OF_CHUNK];
int placemark,
length;
cout << "Enter sequence of characters, '.' to terminate:" << endl;
do
{
for (int index = 0; (input[index].letter != '\0') && (input[index - 1].letter != '.'); index++)
{
cin >> input[index].letter;
placemark++;
}
//I intend to put something here to handle if the code
needs to read in another chunk, but I want to fix the crashing
problem first
}
while (input[placemark].letter != '.');
//print out what was read in, just to check
for (int index = 0; input[index].letter != '\0'; index++)
{
cout << input[index].letter;
}
return 0;
}
我已经尝试查找单个字符的阅读方式,但到目前为止,还没有发现任何对我的情况有用的信息。任何关于我做错事情或在哪里可以找到有用资源的提示,将不胜感激。
答案 0 :(得分:1)
确定要使用声明的结构吗?
如果您只想计算一个字符出现的次数,则无需存储该字符。您只需要存储它出现的次数。因此只需{}
,每个索引都映射到一个字母(即索引unsigned lettersCount[26]
表示0
,索引a
表示1
)。每当出现字母时,只需增加该索引的数量即可。
您可以使用 ASCII 将字母映射到索引。每个字母都由一个十进制数字表示,您可以在 ASCII表中查找该数字。例如,字母b
用十进制值97表示,a
是98等等。这个数字不断增加,我们可以利用。因此,如果要将字母映射到索引,只需要做b
或value - 97
。例如,如果您读了字母value - 'a'
,则从中减去97,您将得到a
,这就是您想要的。得到索引后,增加该字母的计数只是一个简单的0
。
关于大写和小写的处理(即,对它们进行相同或不同的处理),将由您决定如何执行(如果您能理解我的解释,这应该非常简单) )。