【C语言】单词拼写检查

news2024/12/26 11:57:22

算法集训传送门》

  👉引言

在这里插入图片描述

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

💖 ❄️我们的算法之路❄️💖

   众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
              ☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
   💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs),💝宽度优先搜索(bfs),💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉

在这里插入图片描述

一、 💎问题描述💎

已知有一个正确词汇表(存在当前目录下的文件words.txt中),编写程序,利用该词汇表对某一英文文章(存在当前目录下的文件in.txt中)进行单词正确性检查。文章中的单词是指文章中只由(小写或大写)英文字母组成的字符串。若文章中的单词在词汇表中能查找到(大小写无关,且完全相同),则该单词拼写正确,否则拼写错误。将文章中所有拼写错误的单词输出到标准输出,输出时拼写错误单词中的字母都转换为小写字母,并且按照字典顺序由小到大输出。假设所有错误单词转变为小写字母形式后,不会出现相同的错误单词;词汇表中的单词个数不会超过100个,词汇表及文章中每个单词的字符个数不会超过20,出错的单词个数不会超过50个。若没有出错单词,则什么都不输出。

输入形式

英文文章和词汇表分别存储在当前目录下的文件in.txt和words.txt中。词汇表中的每个单词都独占一行。

输出形式

以字典顺序由小到大向控制台输出错误单词,每个错误单词独占一行。

输入样例

假如in.txt中的文章内容如下:

C was originally designd for and implemented on the UNIX(or LINUX) operating system on the DEC PDP-11, by Dennis Ritchie.
The book is not aa introductry programing mannual.

给定的词汇表words.txt中的内容如下:
an
and
book
by
c
dec
dennis
designed
for
implemented
introductory
is
linux
manual
not
on
operating
or
originally
pdp
programming
ritchie
system
the
unix
was

输出样例

aa
designd
introductry
mannual
programing

样例说明

将读入的英文文章中的单词与给定的词汇表进行检查发现,有五个单词aa,designd,introductry,mannual和programing是错误的,因为词汇表中没有单词与它们大小写无关匹配。

二、💎思路详解 💎

主要就是三大部分:

  1. 从文本中读取字符串,并拆解为单词(去除特殊字符以及数字)
  2. 对得到的二维字符数组进行排序(这里用的普通冒泡排序,可以换成 快排,堆排序等)
  3. 与字典比对,如果在字典中出现(说明该单词是正确的),则不打印;反之打印在这里插入代码片(这里的比对使用的暴力双重for,优化的话可以用哈希表)

三、💎代码展示 💎

#include<stdlib.h>
#include<stdio.h>
char ans[1000][50] = { 0 };
int I1, I2;
char c[7] = { '.','\'','(',')','"' ,',','-' };
int Se[500];
char ans2[1000][50];
int main() {
	for (int i = 0; i < 7; i++) {
		Se[c[i]] = 1;
	}
	char sum[1024];//F://input.txt
	FILE* fi = fopen("./in.txt", "r+");
	while (fgets(sum, 1024, fi)) {
		int t = sum[strlen(sum) - 1];
		sum[strlen(sum) - 1] = t == '\n' ? ' ' : t;
		for (int i = 0; i < strlen(sum); i++) {
			if (
				sum[i] == ' ' || Se[sum[i]] || isdigit(sum[i])) {

				if (I2) {
					ans[I1][I2] = '\0';
					//printf("%s", ans[I1]);
					I2 = 0;
					I1++;
				}

				continue;
			}
			ans[I1][I2++] = tolower(sum[i]);
		}

	}
	for (int i = 0; i < I1; i++) {
		for (int j = 0; j < I1 - i - 1; j++) {
			if (strcmp(ans[j], ans[j + 1]) > 0) {
				char temp[100];
				strcpy(temp, ans[j + 1]);
				strcpy(ans[j + 1], ans[j]);
				strcpy(ans[j], temp);
			}
		}
	}
	char tem[100];
	strcpy(tem, ans[0]);
	for (int i = 0; i <= I1; i++) {
		if (strcmp(ans[i], tem))	strcpy(tem, ans[i]);
	}

	fclose(fi);

	int I3 = 0;
	fi = fopen("./words.txt", "r+");
	int index = 0;
	while (fscanf(fi, "%s", ans2[index++]) != -1);

	for (int i = 0; i < I1; i++) {
		int f = 0;
		for (int j = 0; j < index; j++) {
			if (!strcmp(ans[i], ans2[j]))
			{
				f = 1;
				break;
			}
		}
		if (!f)printf("%s\n", ans[i]);
	}
	fclose(fi);
	fi = NULL;
	return 0;
}

🌹写在最后💖
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!🌹🌹🌹在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息

目前飞书社交办公应用成为公司日常沟通办公的协作工具&#xff0c;以及作为各种流程的审批处理系统&#xff0c;HR 也会在飞书上去管理所有员工的状态及组织架构。 随着公司内新部署的业务系统越来越多&#xff0c;例如Jenkins、JIRA、Gitlab、Confluence、禅道等&#xff0c;有…

门店数字化转型| 美发店智慧管理系统

颜值经济时代及他经济崛起&#xff0c;人们更注重自身形象&#xff0c;且追求方便快捷体验好的服务&#xff0c;而且她们越来越理智&#xff0c;不再盲目跟风&#xff0c;关注自身感受&#xff0c;追求便利个性化服务。 美容美发市场规模大但整体线上化程度偏低&#xff0c;下沉…

计算机网络复习——第六章网络层

hhhhh 还是今天的我&#xff0c;今天把这两个肝了&#xff0c;准备27考试&#xff0c;耶耶耶&#xff01;&#xff01;&#xff01;小h加油&#xff01; 《计算机网络》&#xff08;谢希仁&#xff09;内容总结 (javaguide.cn) 重点知识&#xff1a; 域名系统&#xff08;DN…

gptp报文完成时间同步原理

gptp(generalized Precision Time Protocol&#xff0c;广义精确时间同步协议),能够完成微秒级的时间信息同步 gptp定义了两种类型的设备 每一种设备都有自己的本地时钟&#xff0c;设备中用来发布同步时间报文的网络端口被称为主端口&#xff0c;用来接收时间同步报文的被称…

【Flutter】mixin简单使用

序言 之前有个技改任务&#xff0c;把司机学堂代码由原生转到Flutter。过程中遇到一个问题&#xff0c;学堂资料有pdf、视频、和图片&#xff0c;三种学习都会有几个共同的方法&#xff0c;比如学习进度更新、弹窗提示、完成接口调用等。在iOS中是用协议方法来实现&#xff0c…

Paper写作如何正确掌握模板内容?

要写好Paper绝不仅仅是掌握模版或者结构就够了&#xff0c;也不要指望几个小时内搞定一篇(只有经验超级丰富的人才有可能)。你们要做的是&#xff1a; To write a paper well is not only to master the template or structure,but also not to expect to finish one article i…

现代密码学导论-6-完美保密性的局限性

目录 2.3 Limitations of Perfect Secrecy 完美保密性的局限性 THEOREM 2.11 完美保密对密钥空间的要求 THEOREM 2.11 的证明 2.3 Limitations of Perfect Secrecy 完美保密性的局限性 在前一节的最后&#xff0c;我们指出了一次性密码本方案的缺点。事实上&#xff0c;这些…

vue-cli + APIcloud

1.安装node.js 2.全局安装cli3 npm install -g vue/cli 备注&#xff1a;vue cli3官网 https://cli.vuejs.org/zh/ 3.进入工作目录里运行 vue ui&#xff0c;此时会打开vue的UI面板 4.在面板中创建新项目&#xff0c;输入项目名之后点击下一步&#xff0c;选择预设-默认后直接创…

【手把手】教你玩转SpringCloud Alibaba之Seata

1、事务的概念 分布式事务理论 事务的四大特性&#xff1a;A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xff0c;要么都执行完成&#xff0c;要么全部不执行&#xff0c;不可能出现部分成功部分失 败的情况&#xff1b;C&#xff0…

Vue3路由的使用

文章目录1. 路由的集成和使用2. 声明式导航3. 编程式导航4. 获取页面路由参数数据4.1 动态路由传参和query传参4.2 编程式导航传参5. router-view和keepAlive、transition结合1. 路由的集成和使用 安装&#xff1a; yarn add vue-router4创建 router 目录&#xff0c;并在其下…

传奇单机架设教程,五分钟完成单机架设

准备工具:DBC2000 版本 补丁 传奇架设步骤 1.解压补丁到传奇客户端 2.解压版本到D盘盘符 3.安装配置DBC2000 4.打开引擎控制器启动 5.打开登陆器选择单机127.0.0.1 确保自己的热血传奇客户端是16年以后的 最好是最新版的. 不要使用已经淘汰的10周年客户端 …

Windows技巧之注册表

介绍 注册表是Windows操作系统中的一个核心数据库&#xff0c;其中存放着各种参数&#xff0c;直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行&#xff0c;从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息&#xff0c…

这便是智能

🍿*★,*:.☆欢迎您/$:*.★* 🍿

复制集群架构设计技巧

Redis Sentinel设计技巧 Redis Sentinel基本架构 Monitoring Sentinel可以监控Redis节点的状态 Notification Sentinel可以通过API进行集群状态通知 Automatic failover Sentinel实现故障自动切换 Configuration provider Sentinel为client提供发现master节点的发现功能…

WebDAV之葫芦儿·派盘+i简记

i简记 支持webdav方式连接葫芦儿派盘。 每天都去记录生活中所消费的琐碎开支,不仅浪费时间,还有很多广告和理财推销。那有没有纯粹的手机在线记账工具?可以轻松把微信、支付宝账单导入,支持外账入内,还有汇率转换等?答案是肯定的,i简记就是非常实用的在线记账工具。 i…

SwiftUI——如何使用新的NavigationStack和NavigationSplitView(如何页面跳转2.0以及如何制作侧栏)

从 iOS 16 开始&#xff0c;苹果开始弃用原先的NavigationView&#xff0c;以后会逐渐完全淘汰掉。现在开始使用NavigationStack和NavigationSplitView。NavigationStack的效果和原本的NavigationView一样&#xff0c;而NavigationSplitView则和现在 iPadOS 上的NavigationView…

Elastic Search(一)

1. elasticsearch 概述 1.1 简介 官网: https://www.elastic.co/ Elasticsearch (简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 查询和分析 可以自定义搜索方式: 通过 Elasticsearch&#xff0c;您能够执行及合并多种…

TAPD项目管理:工作流自动化最佳实践

TAPD全称为腾讯敏捷产品研发平台&#xff0c;凝聚了腾讯内部各个产品体系多年敏捷开发的实践精髓。TAPD的【自动化助手】模块通过【触发条件】【执行条件】的规则设定&#xff0c;可以轻松实现自定义子需求、父需求、缺陷管理之间的流转和自动化。 产品/研发的日常工作中&…

mybatis-plus通过inSql实现子查询以及运算符

mybatis-plus通过inSql实现子查询以及运算符一、Controller二、Service1、子查询Service2、运算符Service三、结果一、Controller GetMapping("/queryProductByTypes")public List<ProductDTO> queryProductByTypes(RequestParam("types") List<S…

C数据结构-堆的实现思路和堆排序的实现

堆和堆排堆的定义为什么使用数组&#xff1f;堆接口函数的实现堆的初始化堆的销毁堆的打印堆的插入&#xff01;&#xff01;堆的删除&#xff01;&#xff01;堆的判空返回堆顶的元素堆的大小堆排序的实现&#xff01;&#xff01;实现堆排序的两种方式时间复杂度的分析Last前…