【C语言练习】分离英语句子中的单词并统计每个单词出现次数后排序输出
/* 分离英语句子中的单词并统计出现次数后排序输出 */#include <stdio.h>
#include <string.h>#define length 1000void input (char sentence[length]); // input函数,输入英文句子
void separate (char sentence[], char words[50][50], char frequency[50]); // separate函数,分离出单词,并且统计各个单词的数量
void sort (char words[50][50], char frequency[50]); // sort函数,将分离出的单词的数据按要求排序后输出
void print_star (void); // print_star函数,输出星号分割线
void exchange_line (char words[50][50], int n); // exchange函数,交换数组第 n+1 行和其下一行int main (void)
{char sentence[length]; // 存放句子的数组char words[50][50]; // 存放单词的数组char frequency[50]; // 存放单词出现次数的数组// 将定义的数组全部初始化memset (sentence, '\0', length);memset (words, '\0', 2500);memset (frequency, '0', 50);// 输入句子并储存在 sentence[length] 字符串中input (sentence);// 将输入的句子中的单词分离出来并计数separate (sentence, words, frequency);// 排序后输出结果print_star ();sort (words, frequency);print_star ();return 0;
}// input函数,输入英文句子
void input (char sentence[length])
{printf ("Please input a sentence in English.\n");gets (sentence);
}// separate函数,分离出单词,并且统计各个单词的数量
void separate (char sentence[length], char words[50][50], char frequency[50])
{int k, i=0, j, m, n;// 将单词转化为小写,分离并储存在 words[50][50] 中,每一行存一个单词for (k = 0; sentence[k] != '\0'; k++){if (('Z' < sentence[k] && sentence[k] < 'a') || sentence[k] > 'z' || sentence[k] < 'A')continue;else{for (j = 0; ('a' <= sentence[k] && sentence[k] <= 'z') || ('A' <= sentence[k] && sentence[k] <= 'Z'); k++, j++){// 将所有单词转换为小写if ('A' <= sentence[k] && sentence[k] <= 'Z')sentence[k] = sentence[k] + ('a' - 'A');words[i][j] = sentence[k];}i++;}}// 删除 words[50][50] 中重复的单词并统计每个单词出现的次数for (m = 0; m < 50; m++){if (words[m][0] != '\0'){frequency[m] = 1;for (n = m + 1; n < 50; n++){if (strcmp (words[m], words[n]) == 0){strcpy (words[n],"\0");frequency[m]+=1;}}}}
}// sort函数,将分离出的单词的数据按要求排序后输出
void sort (char words[50][50], char frequency[50])
{int m, n, i, j, t;char temp;for (m = 0; m < 50; m++){words[m][48] = frequency[m];}// 单词出现次数排序for (m = 0; m < 49; m++){for (n = 0; n < 50; n++){t = n + 1;if (words[n][48] == '\0')words[n][48] = 0;if (words[t][48] == '\0')words[t][48] = 0;if (words[n][48] < words[t][48])exchange_line (words, n);}}// 出现次数相同的单词按对应字符串的大小排序for (m = 0; m < 50; m++){for (n = 0; n < 49; n++){t = n + 1;if (words[n][48] == words[t][48]){t = strcmp (words[n], words[t]);if (t > 0)exchange_line (words, n);}}}for (i = 0; i < 50; i++){for (j = 0; words[i][j] != '\0'; j++){printf ("%c",words[i][j]);}if (words[i][0] == '\0')continue;printf("(%d) ", words[i][48]);}
}// print_star函数,输出星号分割线
void print_star (void)
{printf ("\n");for (int i = 0; i < 100; i++)printf ("*");printf ("\n");
}// exchange_line函数,交换数组第 n+1 行和其下一行
void exchange_line (char words[50][50], int n)
{int j;char temp;int t;t = n + 1;for(j = 0; j < 50; j++){temp = words[n][j];words[n][j] = words[t][j];words[t][j] = temp;}
}/************* 陶睿涵 2020年04月24日 *************/
【C语言练习】分离英语句子中的单词并统计每个单词出现次数后排序输出相关推荐
- 统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数...
统计一个英文句子中包含2个a的单词有几个,并将两个a替换为星号,不能用count函数 def count(s,x): if (not isinstance(s,str)) or (not isinst ...
- php 计算字符串相邻最大重复数_php如何解决字符串中重复字符的次数并且排序输出的方法...
在php开发中有这样的需求.在指定的字符串中提取出每个单位字符出现的次数,并且倒序排序,截取前4个.留作使用.刚拿到这个需求的时候,我想了想,难道要把每个字符全部切割出来之后,一一的比对计算出相应的出 ...
- 分离出句子中的单词(双指针)(1)
输入一个句子,要求输出单词,且一个单词占一行 如 输入 abc def gh 输出 abc def gh 下面有解题思路 //输出句子中的单词 #include <bits/stdc++.h ...
- 【C语言数组题】编写程序查找一个英文句子中所有的最长的单词
[代码] #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 200 void ...
- 单词检查:判断文件中的英文单词是否正确,若不正确,排序输出到另一个文件中
文章目录 问题描述 思路 代码 问题描述 已知有一个正确单词索引表(保存在当前目录下的文件index.txt中,且全为小写字母,按照字典序由小到大排列,每个单词独占一行),编写程序利用该单词表对某一英 ...
- 在英语句子中,哪些词可以做主语
主语表明这句话说的是谁和什么,主语主要由名词.代词或相当于名词的单词,短语或从句充当. 一. 名词作主语 David arrived last night. 大卫昨晚到达. Pride goes ...
- 把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;...
import java.util.Scanner; public class two{ public static void main(String[] args) { Scanner input = ...
- 整理英语句子:将首字母大写,单词之间只能一个空格,最后加句号
利用指针指向字符串 #include<stdio.h> #include<string.h> void sentence(char*p1) {char*p2;if(p1[0]& ...
- 英语基础-英语的句子中的谓语
英语句子的句子成分包括:主语.谓语.宾语.表语.补语.同位语.定语 和 状语 1. 什么可以作谓语? 1. My father must be angry. 谓语必须是实义动词或者系动词. 2. ...
- 如何用计算机辅助语言学习英语,浅析计算机辅助语言学习在高职高专英语教学中的运用研究...
浅析计算机辅助语言学习在高职高专英语教学中的运用研究 [论文关键词]计算机辅助语言学习 英语教学 优势 问题 [论文摘 要]本文通过对河北外国语职业学院181名学生的问卷调查,对目前计算机辅助语言学习 ...
最新文章
- 文字转语音,语音转语音,实际的转化过程
- Android实现炫酷SVG动画效果
- NumberUtils、ArrayUtils和RandomUtils工具类用法
- 消息队列背后的设计思想
- [Leedcode][JAVA][第355题][设计推特][面向对象][哈希表][链表][优先队列]
- OpenCV的滤波与卷积
- 用Fiddler调试localhost
- bowtie1和bowtie2的比较
- oracle解压后不能运行,求救:oracle10安装后net Manager等工具无法启动
- 递归典型——汉诺塔问题
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!
- hdu--1073--字符串处理
- 聊聊对账系统的设计方案
- (stream流)List转Map
- nyoj592 蛇形填数
- 【打卡-Coggle竞赛学习2023年4月】图像检索与重复图像识别
- 2021年英语四级作文
- 团队建设之做好技术团队管理
- 使用rust和actix实现一个视频流服务器
- bm 37 bm38
热门文章
- Python常用模块 之 hashlib模块
- 计算机桌面组成部分教案,三年级第6课 《认识桌面》优秀教案
- php桌面快捷方式图标,window_Win10桌面图标没了怎么办?Win10桌面快捷方式消失了解决方法,不少使用windows10系统的朋友都 - phpStudy...
- 服务器密码已修改是什么意思,服务器密码已更改请输入新密码
- STM32 自定义串口协议
- MD5加密算法简单实现
- java加密算法之MD5篇
- 计算机主机的税收,税控电脑
- oracle获取字符串长度函数length()和hengthb()
- 汉语转拼音(带音调和多音字识别)