所以我有点卡住,计算空格不再有用,因为它总是留下一个单词不计算。我无法在1处开始变量,因为如果没有任何单词就会怎么样。
这是我目前的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char ch;
char character;
char prvs;
unsigned long int linecount = 0;
unsigned long int charcount = 0;
unsigned long int wordcount = 0;
//int i = 0;
while((character=getc(stdin)) != EOF){
//char n[] ="\n";
if(character== '\n'
linecount += 1;
/*
if(character==' ' || character=='\n'){
if(character=='\n'
wordcount +=2;
else
wordcount += 1;
}*/
if(character != ' ' && prvs == ' ')
wordcount += 1;
charcount += 1;
prvs = character;
}//TEST
printf("CHAR: %lu WORD: %lu LINE: %lu\n", charcount, wordcount, linecount );
return 0;
}
这是我对其进行测试的文件
hello world
hi there
bye
这是我的输出
CHAR: 25 WORD: 2 LINE: 3
答案 0 :(得分:0)
您应该使用:
if(!isspace(character) && isspace(prvs)){
而不是
if(character != ' ' && prvs == ' '){
这将计算在换行符之后开始计算的单词。它还将处理输入中存在的任何制表符。
您还必须添加逻辑来计算第一个单词。为此,您可以将prev
初始化为:
char prev = '\0';
并更改行
if(!isspace(character) && isspace(prvs)){
到
if(!isspace(character) && (isspace(prvs) || prvs == '\0') ){
答案 1 :(得分:0)
以下代码适用于我:
int atLeastOneChar = 0;
prvs = '/n';
while((character=getc(stdin)) != EOF)
{
if(character== '\n')
{
++linecount;
if((prvs != '\n') && (prvs != ' ')) ++wordcount;
}
if((character == ' ') && (prvs != ' ' ) && (prvs != '\n' ))
{
++wordcount;
}
if((character != ' ') && (character != '\n' ))
{
atLeastOneChar = 1;
}
charcount += 1;
prvs = character;
}//TEST
if((atLeastOneChar == 1) && (wordcount == 0)) ++wordcount;
printf("CHAR: %lu WORD: %lu LINE: %lu\n", charcount, wordcount, linecount );