我有一个几乎很好的工作程序来计算标准输入的单词。 必须要计算的是一个程序参数。
问题在于我使用空格来查看单词,但我也必须在单词内部计算。 示例:如果我的输入是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;
}
答案 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;
}