检测字符串中有多少个单词改新--C语言谭浩强版例6.8
程序员文章站
2022-04-12 20:39:55
例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
原解题思路:
从第一个字符开始逐个字符进行检查,判断此字符是否是...
例6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
原解题思路:
从第一个字符开始逐个字符进行检查,判断此字符是否是新单词的开头。判断是否出现新单词,可以由是否有空格出现来决定。如果测出某一个字符为非空格,而它的前面的字符是空格,则表示新的单词开始了。
#include <stdio.h> #include <stdlib.h> int main(void) { char string[81]; int i, num=0,word =0; char c; gets(string); for(i=0; (c=string[i])!='\0'; i++) //只要不是字符'\0'就继续循环 { if(c==' ') word=0; else if (word==0) { word=1; num++; } } printf("There are %d words in the line.\n", num); return 0; }
改新版思路:
单词后面出现一个不是字母的字符,则这个单词结束。扩展了字符串中的标点
/****************************************************** 6.8 Count how many words Plan: If a charactor is not a letter, and before it there is a letter, count add CREATE---------------------------- By: Idooi Liu Time: 2015/09/27-1022 ---------------------------------- ******************************************************/ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> bool ifALetter(char charactor); int main(void) { int i, number=0; char stringMe[100]; gets(stringMe); for(i=0; i<100; i++) { if(stringMe[i+1]=='\0') //出现字符'\0'结束循环 { if(ifALetter(stringMe[i])) number++; break; } //单词的最后一个字符判断,下一个字符不是字母,单词结束 if(ifALetter(stringMe[i]) && !ifALetter(stringMe[i+1])) number++; } printf("There are %d words in the line.\n", number); getchar(); return 0; } //判断字符是否是字母 bool ifALetter(char x) { if((x>64 && x<91) || (x>96&&x<122)) return true; else return false; }