• 【C语言】单词拼写检查


    算法集训传送门

      👉引言

    在这里插入图片描述

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

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

       众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
                  ☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
       💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(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
    #include
    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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

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

  • 相关阅读:
    【ES-实战入门】
    【中国知名企业高管团队】系列49:VIVO
    Spring-注解开发
    GODIVA论文阅读
    FLowUs:一款优秀强大、好看的文件协作软件
    java基于Springboot+vue的零食销售商城网站 elementui
    [大家的项目] cargo-offline 命令
    【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量
    vue深拷贝的几种实现方式
    软件测试漏测怎么办(下)
  • 原文地址:https://blog.csdn.net/runofsun/article/details/128021452