统计字数、数字、大小写字符

Posted

技术标签:

【中文标题】统计字数、数字、大小写字符【英文标题】:Counting the number of words, numbers, uppercase and lowercase characters 【发布时间】:2021-12-08 15:40:01 【问题描述】:

我是一名初级程序员,我发现有一个练习说:

写出一串字符,确定字数、数字、大小写字符和空格的个数。

我认为我构建了一个足够体面的程序并且它确实有效!

问题是当我尝试运行它时,结果并不完全正确。

例如;当我写信时:HI MY name is Ani 1 1 2 a 它说

空格 = 8。在这里更正

数字 = 3。此处也更正

大写字符 = 4。应该是 5

小写字符 = 7。应该是 9

字数 = 26。这是完全错误的

至于单词,我找到了一种新的计数方法。通过计数spaces+1,但我想正确计数。

可以指出错误吗?

这是我到目前为止所做的

int main() 
    char str[1000+1];
    int words = 0;
    int numbers = 0;
    int uppercharacters = 0;
    int lowercharacters = 0;
    int spaces = 0;
    int i;

    printf("Please enter the string of characters: ");
    gets(str);
    for (i = 0; str[i] != '\0'; i++) 
        if (str[i] > 'a' && str[i] < 'z')
            lowercharacters++;
        else if (str[i] > 'A' && str[i] < 'Z')
            uppercharacters++;
        else if (str[i] == ' ')
            spaces++;
        else if (str[i] > '0' && str[i] < '9')
            numbers++;
        else if (str[i] == ' ' && str[i + 1] != ' ');
            words++;
    
    printf("Spaces = %d\n", spaces);
    printf("numbers = %d\n", numbers);
    printf("Upper Case characters = %d\n", uppercharacters);
    printf("Lower Case characters = %d\n", lowercharacters);
    printf("Words = %d\n", words + 1);
    return 0;

【问题讨论】:

您确定if(str[i]&gt;'A' &amp;&amp; str[i]&lt;'Z') 中的范围正确吗?该范围的“边界”是什么?如果字符正好是“A”或“Z”会发生什么? @FabiosaysReinstateMonica 是的。如果答案是 => 和 = 【参考方案1】:

至于单词,我找到了一种新的计数方法。通过计数spaces+1,但我想正确计数。

由于;else if() 的末尾,代码失败。

提示:启用所有警告的优秀编译器会对此发出警告。

节省时间,并启用所有警告。

//                                   v !!!
else if(str[i]==' ' && str[i+1]!=' ');
    words++;

即使改正为

else if(str[i]==' ' && str[i+1]!=' ')
    words++;

它仍然失败,输入像" abc"(前导空格)报告为两个单词。


相反,计算出现在非字母之后的字母。

char previous = '\n';

for(i=0; str[i] != '\0'; i++) 
  if (isalpha(str[i]) && !isalpha(previous)) 
    words++;
  
  previous = str[i];

如果标准函数(如 is...())不被允许,请创建您自己的辅助函数。

【讨论】:

【参考方案2】:

您应该使用if(str[i]&gt;='a' &amp;&amp; str[i]&lt;='z') 而不是if(str[i]&gt;'a' &amp;&amp; str[i]&lt;'z')。您不想从测试中排除字符 z 和 a。

【讨论】:

在我发布问题的那一刻就想通了。你能帮我数单词吗?正如我在问题中所说,我发现单词的数量是空格的数量+1,但我想说一个“正确”或这样做【参考方案3】:

对于计数单词部分,请注意在您的最后一个 else if 语句之后有一个错放的分号。如果你修正了那个错字,单词的数量将不会 100% 正确,但你也许可以从那里开始工作:)

【讨论】:

对于数词部分,我已经找到了另一种解决方案。如果计算空格,则单词为空格+1。但我不明白为什么我的解决方案不起作用。在我看来,至少似乎是正确的。比如第一个字符是空格,第二个字符不是,这可能意味着我们遇到了一个单词,总数是单词+1

以上是关于统计字数、数字、大小写字符的主要内容,如果未能解决你的问题,请参考以下文章

Python进阶用 Python 统计字数

python 哈姆雷特 字数统计 词云

040.文件的字数统计程序

VIM - 字数统计

如何计算iperf中,包的个数

WORD中字数和字符