程序计数单词c

时间:2012-12-28 22:15:07

标签: c counting

我有一个几乎很好的工作程序来计算标准输入的单词。 必须要计算的是一个程序参数。

问题在于我使用空格来查看单词,但我也必须在单词内部计算。 示例:如果我的输入是aa aaaa #EOF,并且我想计算aa,结果应为4.我的代码结果为2.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>


int word_cnt(const char *s, char *argv[])
{
    int cnt = 0;

    while(*s != '\0')
    {
        while(isspace(*s))
        ++s;
        if(*s != '\0')
        {
            if(strncmp(s, argv[1], strlen(argv[1])) == 0)
            ++cnt;

            while(!isspace(*s) && *s != '\0')
            ++s;
        }
     }

    return cnt;
}

int main(int argc, char *argv[])
{
    char buf[1026] = {'\0'};
    char *p="#EOF\n";
    int tellen = 0;

    if (argc != 2)
    {
        printf("Kan het programma niet uitvoeren, er is geen programma argument gevonden\n");
        exit(0);
    }

    while((strcmp(buf, p) !=0))
    {
        fgets (buf, 1025, stdin);
        tellen += word_cnt(buf, argv);
    }

    printf("%d", tellen);

    return 0;
}

3 个答案:

答案 0 :(得分:3)

你有这个:

if(strncmp(s, argv[1], strlen(argv[1])) == 0)
    ++cnt;

while(!isspace(*s) && *s != '\0')
    ++s;

试试这个:

/* if it matches, count and skip over it */
while (strncmp(s, argv[1], strlen(argv[1])) == 0) {
    ++cnt;
    s += strlen(argv[1]);
}

/* if it no longer matches, skip only one character */
++s;

答案 1 :(得分:2)

int word_cnt(const char *s, char *argv[])
{
    int cnt = 0;
    int len = strlen(argv[1]);
    while(*s)
    {
            if(strncmp(s, argv[1], len) == 0)
              ++cnt;

            ++s;
     }

    return cnt;
}

答案 2 :(得分:1)

在循环中尝试strncmp()

/* UNTESTED */
unsigned wc(const char *input, const char *word) {
    unsigned count = 0;
    while (*input) {
        if (strncmp(input, word, strlen(word)) == 0) count++;
        input++;
    }
    return count;
}