我正在尝试计算用户输入的字符串中的循环和空行数。所以这就是我做的方式:
#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循环。这里有什么帮助? :)
答案 0 :(得分:2)
正确的解决方案还需要处理字符串和注释
print("I have no for() loops")
/* commented out for() loop */
char* c = "for()\"loop\\";
如果你不关心这个,并且真的想使用普通的C,我会建议使用“strtok”函数将字符串拆分成使用分隔符的单词(在你的情况下基本上都是非字母数字符号 - 空格,括号,逗号等......)。一旦你有了单词,你可以用“do”,“while”或“for”来strcmp()它们