C语言:统计输入的一行英文句子中的字母及单词个数,带注解!

//通过键盘输入一行英文句子,统计其中的英文字母和单词的数量,单词之间用空格分开(标点符号不算单词);
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
 char string[100];//根据拟从键盘输入的字串的长度需要适当调整,要避免输入的长度超出设定的范围。
 char c;
 int i, num=0,sum=0,word=0; //定义 word 用来指示一个单词是不是结束或新单词是否开始;
 printf("请从键盘输入一行需要查询的英文句子,进行单词数量统计:\n\n");
 gets(string);   //从键盘获得输入的字符串;
 //以下统计句子中的英文字符个数;
 for(i=0;(c=string[i])!=‘\0‘;i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!=‘\0‘,即未到达结束符‘\0‘的话,执行i++;
    {
        if((‘A‘<=string[i]&&string[i]<=‘Z‘)||(‘a‘<=string[i]&&string[i]<=‘z‘))
            sum++;  //以上为条件句,如果字符在A~Z,a~z 范围之内的话,则执行sum++,累加英文字母个数;
    }
 //以下统计句子中的英文单词个数;
  for(i=0;(c=string[i])!=‘\0‘;i++) //for循环语句,遍历句子中的每个字符;初始化i=0;若字符c!=‘\0‘,即未到达结束符‘\0‘的话,执行i++;
    {                              //‘\0‘用作字符串的结束符。它的ASCII数值是0。
    if(c<‘A‘||c>‘Z‘&&c<‘a‘||c>‘z‘)   //设定条件:如果字符 c 遇到A~Z和a~z范围之外其它符号字符的话,包括遇到空格‘ ‘;
         word=0;      //上面条件为真时,执行这里,置word=0,表示未遇到单词,或,一个单词已结束,同时也意味着要开始遇到下一个新单词;
    else if(word==0)  //当条件(word==0)为真,执行下面花括号里面的语句;当word==0时,表示未遇到字母,即未遇到单词,或上一个单词已结束;
           {
               word=1;   //那么置word=1,即,表示下一个新单词开始,
               num++;   //执行num++,累加英文单词的个数;
           }
    }
    printf("\n");
    printf("您输入的这句英文句子中共包含%d个英文字符,%d个英文单词。\n",sum,num);
    
}

示例:输入语句:  Hello ! My friend , how are you ? (注意单词的前后有空格)

时间: 2024-10-30 21:53:12

C语言:统计输入的一行英文句子中的字母及单词个数,带注解!的相关文章

华为机试—倒置英文句子中单词的字母顺序

输入一个英文句子,包含字母大小写.逗号.句号和空格.把英文句子中的单词的字母顺序倒置. #include <iostream>   using namespace std;          void revese(char* start,char* end)   {     while(start<end)       {           *start=*start^*end;         *end=*start^*end;           *start=*start^*e

英文句子中的单词逆序

#include "stdafx.h" #include <iostream> #include <string> #include <stack> using namespace std; int main(int arc, char** argv) { string str="I come from liaoning."; stack<string> works; int len=str.length(); whi

js查找一篇英文文章中出现频率最高的单词

下面这个函数是js查找一篇英文文章中出现频率最高的单词(由26个英文字母大小写构成),输出该单词及出现次数,不区分大小写,主要是正则的运用: function counts(article){ article = article.trim().toUpperCase(); var array = article.match(/[A-z]+/g); article = " "+array.join(" ")+" "; var max = 0,wor

C语言强化(九)翻转句子中单词的顺序

这是到很常见的题目,非常简单,但你用到数据结构了吗,或者说你用对了吗? 通过这道题,你可以掌握: 如何将用户的输入,输出到控制台 如何分割字符串 如何正确使用数据结构 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.标点符号和普通字母一样处理. 例如输入"I am a student.",则输出"student. a am I". 思路 一.获取字符串 首先要能够获取到用户输入的一串字符串,有两点需要注意: 1.如果使

三种方法实现统计一个句子中的字母数 (setdefault、defaultdict的使用)

最常见的方法,构建一个字典,对于句子中出现的字母,如果是首次出现,则值置为1,后后面再出现就加1. def letter_frequency_1(sentence): frequencies={} for letter in sentence: if letter not in frequencies: frequencies[letter]=1 else: frequencies[letter]+=1 return frequencies 对于setdefault方法,如果键在字典中,该方法的

统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数

def count(s,x): if (not isinstance(s,str)) or (not isinstance(x,str)): return None num =0 i = 0 while i<=len(s)-1: if s[i:i+len(x)]==x: num+=1 i+=len(x) else: i+=1 return num print(count("abcdbcd","bb")) s = "I am a abandon,aaa

php字符串英文文本中大写字母,小写字母,空格,标点符号的个数统计

对一段英文文本的信息,统计其中大写字母,小写字母,空格,标点符号的个数 <?php$manuscript = "Where there is a will, there is a way.";//字符串文本$smallLetter = 0;$capitalLetter = 0;$blank = 0;$punctuation = 0; $num=strlen($manuscript);$arr=str_split($manuscript);//字符串分割为数组foreach($ar

软件工程导论课后习题Github作业(把一个英文句子中的单词次序逆序,单词中字母正常排列)

Java源代码  package yly; import java.util.Scanner; public class ruanjian { public static void main(String[] args) { // TODO Auto-generated method stub String q = "how are you"; String[] aa=(String[]) q.split(" "); for(int i = aa.length ;i

反转一个英文句子中的单词,并且对应位置大小写不改变

<?php // your code goes here function strreverse($str){ $strlower=strtolower($str); $tmpstr=implode(" ",array_map('reverse',explode(" ",$strlower))); $strlen=strlen($str); while($strlen>0){ if($str[$strlen-1]>64 && $st