计算一个单词的使用次数。 C

时间:2017-01-04 17:18:37

标签: c parsing

我正在尝试计算用户输入的字符串中的循环和空行数。所以这就是我做的方式:

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

int main(void) {
    int i, lines, loopF = 0, loopW = 0, loopDW = 0, empty = 0;
    char *p, str[200];
    const char test[10] = "while";
    char *f;
    printf("Enter a string. Ctrl+Z for exit.\n");
    while (fgets(str, 200, stdin) != NULL) {
        if (f = strstr(str, test)) { //first way
            loopW++;
        }
        for (i = 0; i < strlen(str); i++) {
            // count loops
            if (str[i] == 'f' && str[i + 1] == 'o' && str[i + 2] == 'r') {
                loopF++;
            }
            if (str[i] == 'w' && str[i + 1] == 'h' && str[i + 2] == 'i'
                    && str[i + 3] == 'l' && str[i + 4] == 'e') { // second way
                loopW++;
            }
            if (str[i] == 'd' && str[i + 1] == 'o') {
                loopDW++;
                if (loopDW >= 1)
                    loopW--;
            }
        }
        // count empty lines
        p = str;
        lines = 0;
        while (*p != '\n') {
            if (*p != ' ') {
                lines = 1;
            }
            p++;
        }
        if (!lines) {
            empty++;
            lines = 0;
        }
    }
    printf("---------------------\n");
    printf(" Empty lines: %d \n\n", empty);
    printf(" Number of loops:\n");
    printf(" For: %d \n", loopF);
    printf(" While: %d \n", loopW);
    printf(" Do/While: %d \n", loopDW);
    printf("---------------------\n");
    return 0;
}

我只为2种方式做了#34;而#34;测试,但当用户输入&#34;而这个&#34;或者&#34;这个时候&#34;它计算它(这不是我想要的)。我希望只有一段时间(一个循环)被计算,而不是与其他符号,但我不知道如何做到这一点。同样适用于do / while和for循环。这里有什么帮助? :)

1 个答案:

答案 0 :(得分:2)

正确的解决方案还需要处理字符串和注释

print("I have no for() loops")
/* commented out for() loop */
char* c = "for()\"loop\\";

如果你不关心这个,并且真的想使用普通的C,我会建议使用“strtok”函数将字符串拆分成使用分隔符的单词(在你的情况下基本上都是非字母数字符号 - 空格,括号,逗号等......)。一旦你有了单词,你可以用“do”,“while”或“for”来strcmp()它们