我正试图创建一个完整的C程序来读取10个字母并将它们显示在屏幕上。我还必须找到某个元素的编号并将其打印在屏幕上。
#include <stdio.h>
#include <conio.h>
void listAlpha( char ch)
{
printf(" %c", ch);
}
int readAlpha(){
char arr[10];
int count = 1, iterator = 0;
for(int iterator=0; iterator<10; iterator++){
printf("\nAlphabet %d:", count);
scanf(" %c", &arr[iterator]);
count++;
}
printf("-----------------------------------------");
printf("List of alphabets: ");
for (int x=0; x<10; x++)
{
/* I’m passing each element one by one using subscript*/
listAlpha(arr[x]);
}
printf("%c",arr);
return 0;
}
int findTotal(){
}
int main(){
readAlpha();
}
字符串
该代码应添加到findTotal()元素中。输出应如下所示。
Output:
List of alphabets : C C C A B C B A C C //I've worked out this part.
Total alphabet A: 2
Total alphabet B: 2
Total alphabet C: 6
Alphabet with highest hit is C
型
4条答案
按热度按时间hivapdat1#
我在你的代码中看到的唯一的运行时问题是这样的语句:
字符串
在程序中,
arr
是char
的数组,而不是格式说明符%c
所期望的单个char
。为了使其工作,printf()
需要扩展为:型
或者:将
arr
视为string,而不仅仅是一个char数组。decomposearr
为`char [11] = {0};//空终止的额外空间型
关于你所陈述的目标的这一部分:
我还必须找到某个元素的编号,并把它打印在屏幕上。
提供以下步骤来修改以下工作
型
int FindTotal(char *arr);
个lb3vh1jj2#
我用一个数组来计算每个字符存在的个数,我做了这个代码但是每个字符个数的显示是在循环中重复的
字符串
kdfy810k3#
没有办法得到你写在数组中的元素的数量。C中的数组只是内存中的一个空间。C不知道哪些元素是实际数据。
但是在C中有一些常见的方法来解决这个问题:
<stdio.h>包含#<string.h>
define ARRAY_SIZE 10
char array[ARRAY_SIZE + 1];
int array_len(char * inp_array){ int ret_瓦尔= 0; while(inp_array [ret_瓦尔]!= '\0')++ret_瓦尔; return ret_瓦尔; }
float array_with_level[ARRAY_SIZE]; int array_with_level;
public void run(){
字符串
}
vbkedwbf4#
<conio.h>
是一个非标准的头。我假设你使用Turbo C/C是因为它是你课程的一部分。Turbo C/C是一个可怕的实现(在2020年),使用它的唯一已知原因是因为你的讲师让你!不过你这里实际使用的都是标准的,我相信你可以把它去掉。
printf("%c",arr);
没有意义。arr
将作为指针传递(指向数组中的第一个字符),但%c
需要一个字符值。我不知道你想让这行做什么,但它看起来没有用-你已经在for中列出了数组-循环。我建议你删除它。如果你这样做,不要担心\0
。你只需要当你想把arr
作为一个字符串,但在代码中,你处理它作为一个10个字符的数组,没有调用任何需要字符串的函数。这时它需要包含一个0结束符。另外,在
main()
的末尾添加return 0;
。这意味着“执行成功”,并且需要符合要求。有了这3个变化,
ABCDEFGHIJ
的输入产生:字符串
它并不漂亮,但这是你所要求的,至少表明你已经成功地阅读了字母。你可能想整理一下.删除
printf("\nAlphabet %d:", count);
,并在scanf(" %c", &arr[iterator]);
之后插入printf("\nAlphabet %d: %c", count,arr[iterator]);
。在负号行(printf("\n-----------------------------------------\n");
)之前和之后加上一行新行,我看起来更好。但这只是化妆品。这取决于你。有很多方法可以找到最频繁出现的字符,但在这个级别上,我推荐一个简单的嵌套循环。
这里有一个函数,它查找最常见的字符(而不是最常见字符的计数),如果有一个平局(两个字符具有相同的计数),它会返回第一个出现的字符。
型
这不是很有效,你可能想放一些
printf
进去看看为什么!但我认为这是在你的专业水平上理解的。这里有一个单元测试的版本。不要在没有某种单元测试的情况下编写代码。这可能看起来很麻烦,但它会帮助调试你的代码。
https://ideone.com/DVy7Cn
脚注:我对你的代码做了最小的修改。有一些很好的建议,你不应该把数组大小硬编码为10,当然也不应该在代码中乱丢这个值(例如在顶部的
#define ALPHABET_LIST_SIZE (10)
)。我已经使用了const
,但这可能是你还没有遇到的。如果你不理解它,也不想学习它,请删除它。你的课程条款禁止剽窃。你不能把我的代码剪切粘贴到你的课程中。你有义务理解这些想法并自己实现它。我的代码效率很低。你可能想做点什么!