. 编写一个程序,读取输入,直至读到 EOF ,报告读入的单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用 ctype.h 头文件中的函数
这题其他都简单,唯独计算单词数需要另外设计函数来实现。总体思路是遍历每个字符,来判断是不是一个单词 。当指针指向单词的首个字符,然后用另外的指针继续往下走,直到不是字符为止。然后这里关键点在于,总体遍历不再是继续原来的位置往下,而是从那个另外的指针开始。实现如下:
int is_words(char *s , int num){
int begin=0;
int end=0;
int go;
int words=0;
for(go = 0; go < num; go++){
if(isalpha(*(s+go))){
begin = go;
for(end = 0;end < num; end++){
if(!isalpha(*(s + begin + end))){
words++;
go = begin + end;
break;
}
}
}
}
return words;
}
整体的题解:
#include <stdio.h>
#include <ctype.h>
#define SIZE 100
int is_words(char *s, int num);
int main(int argc, const char *argv[])
{
char s[SIZE] = {'\0'};
char c;
int num = 0;
int upper=0;
int lower=0;
int digit=0;
int punct=0;
while((c = getchar())!=EOF){
s[num] = c;
num ++;
if(isupper(c))
upper++;
if(islower(c))
lower++;
if(isdigit(c))
digit++;
if(ispunct(c))
punct++;
}
printf("\ntotal:%d,upper:%d, lower:%d, digit:%d, punct:%d\n",num, upper, lower, digit, punct);
printf("words num = %d\n", is_words(s, num));
return 0;
}