我想计算单词,字符,新行的数量,无论我的句子如何。 (例如,即使我输入了这样的句子:
y yafa \n \n youasf\n sd
程序仍然可以正确计算单词,行数,字符数)。我不知道如何用纯C实现这样的程序,有人可以帮我吗?
这是我当前的代码,它只能在某些条件下正确...
int main() {
int cCount = 0, wCount = 0, lCount = 0;
printf("Please enter the sentence you want\n");
char str[20];
int j7 = 0;
while (int(str[j7]) != 4) {
str[j7] = getchar();
if (str[0] == ' ') {
printf("Sentence starts from a word not blank\n");
break;
}
if (int(str[j7]) == 4)
break;
j7++;
}
int count = 0;
while (count < 20) {
if (str[count] != ' ' && str[count] != '\n') {
cCount++;
} else
if (str[count] == ' ') {
wCount++;
} else
if (str[count] == '\n') {
lCount++;
}
count++;
}
printf("Characters: %d\nWords: %d\nLines: %d\n\n",
cCount, wCount++, lCount + 1);
int x = 0;
std::cin >> x;
}
答案 0 :(得分:2)
您不是在 Pure C 中编写,而是在C ++中编写。
要实现目标,您必须将问题汇总为一系列逻辑步骤:
使用'\n'
作为last
字符的初始值,因此第一个字符读取(如果有的话)会开始一个新行,如果不是空格则可能是新单词。
这是一个简单的实现:
#include <ctype.h>
#include <stdio.h>
int main(void) {
long chars = 0, words = 0, lines = 0;
printf("Enter the text:\n");
for (int c, last = '\n'; (c = getchar()) != EOF; last = c) {
chars++;
if (last == '\n')
lines++;
if (isspace(last) && !isspace(c))
words++;
}
printf("Characters: %ld\n"
"Words: %ld\n"
"Lines: %ld\n\n", chars, words, lines);
return 0;
}
如果您需要使用while
循环,可以通过以下方式转换for
循环:
#include <ctype.h>
#include <stdio.h>
int main(void) {
long chars = 0, words = 0, lines = 0;
int c, last = '\n';
printf("Enter the text:\n");
while ((c = getchar()) != EOF) {
chars++;
if (last == '\n')
lines++;
if (isspace(last) && !isspace(c))
words++;
last = c;
}
printf("Characters: %ld\n"
"Words: %ld\n"
"Lines: %ld\n\n", chars, words, lines);
return 0;
}