程序C计数字(不包括数字)

时间:2017-09-12 09:14:33

标签: c string loops if-statement counting

我遇到过很多计算单词的例子(如下面链接中的那个):

Counting words in a string - c programming

if(str[i]==' ')
{
    i++;
}

和数字是:

if(str[i]>='0' && str[i]<='9')
{
    i++;
}

但如果输入是“我有12个苹果”,那该怎么办?我只希望输出显示“字数= 3”?

3 个答案:

答案 0 :(得分:2)

假设您没有包含字母数字组合的单词,例如“foo12”,那么您可以组合您的代码段,如下所示:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "Bex 67 rep";
    int len = strlen(str);
    int count = 0, i = 0;
    while(str[i] != '\0')
    {
        if(str[i] == ' ')
        {
            if(i + 1 < len && ! (str[i + 1] >= '0' && str[i + 1] <= '9') && str[i + 1] != ' ')
                count++;
        }
        i++;
    }
    printf("Word count = %d\n", count + 1); // Word count = 2
    return 0;
}

你循环遍历字符串的每个字符,当你找到一个空格时,你检查 - 如果你不在字符串的最后一个字符 - 如果下一个字符一个数字或者是一个空白。如果是这种情况,那么您可以假设您遇到的空白位于单词之前,因此会增加count

请注意,通常情况不会以空格开头(这是此答案的额外假设),因此单词数量比count多一个。

在现实生活中,使用strtok()并检查每个标记的有效性,因为该方法仅用于演示,应被视为不良方法

答案 1 :(得分:0)

#include <stdio.h>
#include <string.h>

int main ()
{
    char str[] ="I have 12 apples";
    char * pch;
    unsigned long ul;
    int cnt=0;

    pch = strtok (str," ,.-");
    while (pch != NULL)
    {
        ul = strtoul (pch, NULL, 0);
        pch = strtok (NULL, " ,.-");
        printf("%d\n", ul);
        if(ul == 0)
            cnt++;
    }
    printf("count is %d\n", cnt);
    return 0;
}

使用strtok函数解析的字符串标记。

答案 2 :(得分:0)

我的五美分。:)

#include <stdio.h>
#include <ctype.h>

size_t count_words( const char *s )
{
    size_t n = 0;

    const char *p = s;

    while ( 1 )
    {
        int pos = 0;

        sscanf( p, "%*[ \t]%n", &pos );
        p += pos;

        if ( sscanf( p, "%*s%n", &pos ) == EOF ) break;

        if ( isalpha( ( unsigned char )*p ) ) ++n;

        p += pos;
    }


    return n;
}

int main(void) 
{
    char s[] = "I have 12 apples";

    printf( "The number of words is %zu\n", count_words( s ) );

    return 0;
}

程序输出

The number of words is 3

我的建议是不要将标准函数strtok用于此类任务。首先,它可能不处理字符串文字。它有改变原始字符串的副作用。:)