【问题标题】:Count characters using function (frequency)使用函数计数字符(频率)
【发布时间】:2017-10-01 16:59:29
【问题描述】:

例如,为了计算字符数并改进我的代码,我做了一些更改,而不是使用 while 循环。想知道是否有人对我如何改进我的代码以使其更专业、更便宜有任何建议?

#include <stdio.h>


int countingCharacters(char *message, int size, char charsToBeCounted);

int main()
{
    char myString[] = "Hello World!";

    int size = strlen(myString);

    char charToBeCounted = 'a';
    int i = 0;
    int counter = 0;


    while (myString[i] != '\0')
    {
        if (myString[i] == charToBeCounted)
        {
            counter++;
        }
        ++i;
    }

    for (int i = 'a'; i <= 'z'; i++)
    {
        printf("%c: %d\n", charToBeCounted, countingCharacters(myString, size, charToBeCounted));
        charToBeCounted++;
    }
    getchar();

    return 0;
}

int countingCharacters(char *message, int size, char charsToBeCounted)
{
    int counter = 0;

    for (int i = 0; i < size; i++)
    {
        if (message[i] == charsToBeCounted)
        counter++;
    }

    return counter;
}

【问题讨论】:

  • 为什么while 循环在那里?你没有在任何地方使用counter
  • "建议我如何改进我的代码,使其更专业、更便宜?" --> 考虑codereview.stackexchange.com - 一个更好的站点选择。 (这假设它正常工作)
  • 我看到 countingCharacters() 至少有 4 项改进,在 codereview 发布工作代码。
  • 真正改进您的代码:第 1 步:清楚地将 代码测试代码 分开。您是否只关心countingCharacters()char myString[] = "Hello World!"; 之后的所有内容或什么?

标签: c arrays string function char


【解决方案1】:

你把整个事情做了两次。 首先在主循环中。

while (myString[i]!='\0'){...}

还有countingCharacters。浪费大量资源。

此外,如果您使用的是strlen,请不要使用while (myString[i]!='\0)。将其替换为for (i=0;i&lt;size;i++)。您正在投资寻找size,然后不使用它。或者不要使用strlen 而只是使用while (myString[i]!='\0')

仅供参考:您可以等效地使用'\0'0\0 的整数值为0)。

【讨论】:

  • \0 更能表达意思。
  • 确实如此。只是0 更容易上手。 :P
  • while (myString[i] != '\0') 在代码审查和维护人员的眼中很容易,如果您同意this,则比开发成本更高。 while (myString[i]) 是简洁的替代方案。
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多