我正在努力提高我在 c 方面的技能,在了解使用函数 计算字符串中字母出现的不同方法时,我有点困惑,这会很棒收到关于我如何改进代码或计算一个字母在带有函数的字符串中出现次数的新方法的不同意见。
有什么建议吗?
#include <stdio.h>
int countingCharacters(char *message, int size, char charToBeCounted);
int main() {
char arrMess[13] = { "hejsanSvejsan" };
char charsToBeCounted = 'a';
for (int i = 'a'; i <= 'z'; i++) {
printf("%c, %d:\n", charsToBeCounted, countingCharacters(arrMess, 13, charsToBeCounted));
charsToBeCounted++;
}
getchar();
return 0;
}
int countingCharacters(char *message, int size, char charToBeCounted) {
int counter = 0;
int i = 0;
while (i < size)
{
if (message[i] == charToBeCounted)
counter++;
i++;
}
return counter;
}
最佳答案
如果您的代码正在计算字符串中的每个字母(a 到 z),您可以一次完成并使用一个数组来跟踪每个字母的数量。类似的东西:
void countingCharacters(char *message, unsigned int count[]) {
while(*message) {
if(isalpha(*message)) {
count[tolower(*message)-'a']++;
}
message++;
}
}
int main() {
char arrMess[] = { "hejsanSvejsan" };
char i;
unsigned int count[26] = { 0 };
countingCharacters(arrMess,count);
for(i='a';i<='z';i++) {
printf("%c, %d:\n", i, count[i-'a']);
}
return 0;
}
顺便说一下,我删除了arrMess
大小的硬编码,因为它是错误的。您的字符串有 13 个字符长,这对于大小为 13 的字符数组来说太大了,因为您需要 1 个额外的字符来存储它末尾的 '\0'
。
关于CountChars数组字符串循环函数字母出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43546196/