我在编写一个我已经工作了很长时间的作业问题时遇到了麻烦。 我不确切地知道为什么这个问题要求并且需要对此进行一些澄清,并且还要朝着正确的方向发展。
以下是问题:
(2)使用单个下标计数器阵列解决此问题。该程序使用使用C初始化功能定义的字符数组。程序计算每个字母字符a到z的数量(仅计算小写字符)并打印出找到的每个小写字符的出现次数的报告(在整齐的表中)。仅打印至少出现一次的字母的计数。如果它是零,则不打印计数。请勿在解决方案中使用switch语句。注意:如果x的类型为char,则x-'a'是x中字符的ASCII代码与字符“a”之间的差异。例如,如果x保持字符'c',则x-'a'的值为2,而如果x保持字符'd',则x-'a'的值为3.使用以下字符串提供测试结果:
“这是练习(2)的文字示例。”
到目前为止,这是我的源代码:
#include<stdio.h>
int main() {
char c[] = "This is an example of text for exercise (2).";
char d[26];
int i;
int j = 0;
int k;
j = 0;
//char s = 97;
for(i = 0; i < sizeof(c); i++) {
for(s = 'a'; s < 'z'; s++){
if( c[i] == s){
k++;
printf("%c,%d\n", s, k);
k = 0;
}
}
}
return 0;
}
正如您所看到的,我目前的解决方案有点贫血。 感谢您的帮助,我知道网上的每个人都不一定喜欢帮助其他人做作业。 ; P
答案 0 :(得分:2)
char c[] = "This is an example of text for exercise (2).";
int d[26] = {0}, i, value;
for(i=0; i < sizeof(c) - 1; i++){ //-1 to exclude terminating NULL
value = c[i]-'a';
if(value < 26 && value >= 0) d[value]++;
}
for(i=0; i < 26; i++){
if(d[i]) printf("Alphabet-%c Count-%d\n", 'a'+i, d[i]);
}
校正。谢谢caf和Leffler。
答案 1 :(得分:2)
问题的目的是让您弄清楚如何有效地将'a'
和'z'
之间的字符转换为0到25之间的索引。显然,您可以为此假设ASCII(虽然C标准不保证任何特定字符集),但它具有有用的属性,即'a'
到'z'
字符的值是连续的。
完成后,您可以增加数组d
中的相应插槽(请注意,您需要将该数组初始化为全零,这可以通过{{{}}来完成。最后,您将扫描数组char d[26] = { 0 };
并打印大于零的计数,以及相应的字符(这将涉及反向转换 - 从索引0到25进入角色d
到'a'
)。
答案 2 :(得分:2)
幸运的是,您似乎不需要制作适用于EBCDIC计算机(大型机)的解决方案。
您的内部循环需要用条件替换:
if (c[i] is lower-case alphabetic)
increment the appropriate count in the d-array
完成字符串后,您需要一个循环来扫描d阵列,打印出与该条目相对应的字母以及与其相关的计数。
你的d-array使用'char'作为计数;这对练习没有问题,但你可能需要使用更大的整数类型来进行通用解决方案。您还应确保将其初始化为全零;很难从随机垃圾中获取有意义的信息(并且语言不保证除了垃圾之外的任何东西都将存储在存储d阵列的堆栈中。)
答案 3 :(得分:0)
for(s = 'a'; s < 'z'; s++){
j=0;
for(i = 0; i < sizeof(c); i++) {
if( c[i] == s )
j++;
}
if (j > 0)
printf("%c,%d\n", s, j);
}
答案 4 :(得分:0)
char c[] = "This is an example of text for exercise (2).";
char d[26];
int i;
int j;
for(i = 0; i < 26; i++)
{
d[i] = 0; // Set the frequency of the letter to zero before we start counting.
for(j = 0; j < strlen(c); j++)
{
if(c[j] == i + 'a')
d[i]++;
}
if(d[i] > 0) // If the frequency of the letter is greater than 0, show it.
printf("%c - %d\n", (i + 'a'), d[i]);
}