zoukankan      html  css  js  c++  java
  • C语言 实现计算句子中的单词数量的计算

    用c语言实现判断句子单子数量

    编写程序,输出一行字符串中,所有纯英文单词的数目。纯英文单词指的是该单词的所有 字符皆为英文字母(例如:I am a student of 23,需要输出 5)

     

    视频讲解见链接:单词计数

    不废话,上代码

    #include<stdio.h>
    #include<string.h>
    void replace(char a[])//将句子中的标点符号省去
    {
        for(int i=0;i<=(int)strlen(a);i++)//首先将标点符号换成空格
            if(a[i]=='.'||a[i]==','||a[i]==':'||a[i]=='?')
                a[i]=' ';//这样会导致句子中出现连续两个的空格形式存在
        for(int i=0;i<=strlen(a);i++)//去掉句子中的连续空格形式
            if(a[i]==' ')
                if(a[i+1]==' ')//若出现连续两个的空格形式
                    for(int j=i;j<=strlen(a);j++)//将数组左移,覆盖前面的空格
                        a[j]=a[j+1];
    }
    void lower(char a[])//将句子当中的所有字母一律改为小写
    {
        for(int i=0;i<=(int)strlen(a);i++)
            if(a[i]>='A'&&a[i]<='Z')
                a[i]=a[i]+('a'-'A');
    }
    int check(char a[])//核查数组,判断数组中存在的非字母“单词”,例如“23”
    {
        int fix=0;//初始化勘误变量
        int i=0;//让i在words数组中遍历
        while(a[i]!='')
        {
            int flag=0;//定义哨兵flag
            while(a[i]!=' ')
            {
                if(a[i]>='a'&&a[i]<='z')//若单词符合全字母形式,则++i;
                    ++i;
                else//否则flag置为1
                {
                    flag=1;
                    ++i;
                }
            }
            if(flag)//若flag改为了1,说明存在非字母单词
                ++fix;//非字母单词数量加一
            ++i;
        }
        return fix;
    }
    int count(char a[])//开始数数
    {
        int count=0;
        for(int i=0;i<(int)strlen(a);i++)//根据句子当中的空格判断有多少单词的多少
        {
            if(a[i]==' ')
                if(a[i+1]==' ')
                {
                    ++count;
                    ++i;
                }
                else
                    ++count;
            else
                continue;
        }
        int fix=check(a);
        count-=fix;//粗略计算单词以后再减去非单词的数量
        
        return count;
    }
    
    int main(){
        char words[100];//"I am student of 23. #¥%¥ and you? are you 23, too?";
        printf("输入一个句子,并且以句号结尾!
    ");
        gets(words);
        replace(words);
        lower(words);
        puts(words);
        printf("there have %d words
    ",count(words));
    }

    由于是原创代码,后续应该会在bilibili出视频讲解,方便个位理解代码思想。

  • 相关阅读:
    java中传值与传引用
    microsofr visual studio编写c语言
    openfile学习笔记
    在 Windows 和 Linux(Gnome) 环境下 从命令界面打开网页的方式
    使用vsphere client 克隆虚拟机
    route命令
    linux rpm问题:怎样查看rpm安装包的安装路径
    【leetcode】415. 字符串相加
    【leetcode】面试题 17.01. 不用加号的加法
    【leetcode】989. 数组形式的整数加法
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13566904.html
Copyright © 2011-2022 走看看