求助,关于c语言的单词输出程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助,关于c语言的单词输出程序相关的知识,希望对你有一定的参考价值。

题目是这样的,首先用字符串建立一个单词库,里面储存有一定数目(小于100)的单词(单词互不包含,也就是一个单词不能为另一个的前缀),然后用户输入一长串字母,要求是输出在这串字母中出现的单词库中的单词,我想过一个算法,就是从输入字符串的第一个字母开始,然后逐步与单词库中的单词匹配,如果不成功则前两个字母一起匹配,以此类推,知道字符串所有字母都匹配完毕为止。如果第一个不行,那么再从第二个,第三个...开始匹配。但是我感觉算法的效率不高,首先,从一到串长要进行一次循环,然后依次匹配单词库又要进行一次循环,从一开头到串末端又要进行依次循环。共计三次循环,时间效率太低。请问有什么比较好的算法使时间复杂度能到O(n2)到O(n)的级别?

提供三种方法:
1.有多少个单词,开多少个比较线程进行比较;能达到O(n2)缩短到O(n);...
2.在加载单词库后,维护一个单词链表,将每个单词首字符的地址指针用来链表记录,这样就可以用单词去比较用户输入的一长串字母;但不能将时间复杂度缩小到O(n);
3.综合kmp和Shift-And算法,采取位滑动,和位映射结合的方法;时间复杂度能降低,但...仍然不能从O(n2)降到O(n)

所以,开线程是最好达到目的的实现方法;
参考技术A 单词库存储时进行排序,然后建立索引比如a/A-z/Z,从第一位开始一直到最后一位的索引,如果词库太大可以只建立前面部分的索引 参考技术B 新建一个数组english[20]
让english[0]="zero", english[1]="one", english[2]="two"...
然后,对于输入的数字,如果它小于20, 就直接到english数组中去取对应的值.
如果大于等于20小于100,先把十位上的数字取出来, 根据十位数字生成twenty, thirty, fourty, fifty等十位的英文,再把个位取出来,到english数组中去取个位的英文. 如果在100到1000之间,就先取百位......
总之就是这样了
另外,虚机团上产品团购,超级便宜
参考技术C int Index_KMP(char *s, char *t, int pos)
// 利用模式串t的next函数求t在主串s中第pos个字符之后的位置的
// KMP算法。其中,s非空,1<=pos<=strlen(s)
int i = pos;
int j = 1;
while (i<=strlen(s) && j<=strlen(t))
if (j==0 || s[i]==t[j])
++i; ++j;
else j=next[j];

if (j>strlen(t)) return i-strlen(t);
else return 0;


void get_next(char *t, int next[])
// 求模式串t的next函数并存入next数组
int i = 1, j = 0;
next[1]=0;
while (i<strlen(t))
if (j==0 || s[i]==t[j])
++i; ++j;
if (t[i] != t[j]) next[i]=j;
else next[i]=next[j];

else j=next[j];

参考技术D 数据结构 串的模式匹配里有方法实现 。
参考 数据结构(C语言版) 严蔚敏_吴伟民 。
相信你能看懂的 在书本79页 。
可以达到 O(n + m) 。即差不多O(2n)

C语言程序求助

1.按要求输入界面;

2.按要求输入班级人数并判断大/小班,判断规则:5人以上为大班,5人及以下为小班;

3.通过键盘输入班级学生的成绩;

4.判断学生成绩是否合格,并输出。判断规则:60分以下不及格输出“补考”,60-79分输出“合格”,80-100分输出“优秀”,负分数和100分以上显示“错误”。

5.求学生成绩的最高分;

6.并计算该班级学生的总分和平均成绩并显示,规则:负分数和100分以上显示“错误”的分数不计数总分及平均成绩计算中;

程序结束界面输出。

/*
1.按要求输入界面;

2.按要求输入班级人数并判断大/小班,判断规则:5人以上为大班,5人及以下为小班;

3.通过键盘输入班级学生的成绩;

4.判断学生成绩是否合格,并输出。判断规则:60分以下不及格输出“补考”,60-79分输出“合格”,80-100分输出“优秀”,负分数和100分以上显示“错误”。

5.求学生成绩的最高分;

6.并计算该班级学生的总分和平均成绩并显示,规则:负分数和100分以上显示“错误”的分数不计数总分及平均成绩计算中;

程序结束界面输出。

*/
#include "stdio.h"
#include "math.h"
#include "string.h"
void inquire_Num();
void init_Cls();
void inset_Grade();
struct score
float chinese;
float math;
float english;
;
struct student
int id;
    char name[10];
char sex[2];
struct score sc;
;

struct cls
struct student stu[10];
int Cls_number;
int stu_Num;//学生人数
;
struct cls ClsNum[5];
void main()
int choose=0;
printf("/***********************************/\\n");
printf("/*         1、班级属性             */\\n");
printf("/*         2、输入成绩             */\\n");
printf("/*         3、判断合格             */\\n");
printf("/*         4、求最高分             */\\n");
printf("/*         5、求平均分             */\\n");
printf("/***********************************/\\n");
printf("请输入对应的序号(1--5)\\n");
scanf("%d",&choose);
init_Cls();
switch(choose)
case 1:
inquire_Num();
break;
case 2:
inset_Grade();
break;

system("pause");


void init_Cls()
//一班
ClsNum[0].Cls_number=1;
ClsNum[0].stu_Num=5;

ClsNum[0].stu[0].id=1;
strcpy(ClsNum[0].stu[0].name,"卫庄");
strcpy(ClsNum[0].stu[0].sex,"男");
ClsNum[0].stu[0].sc.chinese=80.5;
ClsNum[0].stu[0].sc.math=88.5;
ClsNum[0].stu[0].sc.english=90.5;

ClsNum[0].stu[1].id=2;
strcpy(ClsNum[0].stu[1].name,"李斯");
strcpy(ClsNum[0].stu[1].sex,"男");
ClsNum[0].stu[1].sc.chinese=69.5;
ClsNum[0].stu[1].sc.math=70;
ClsNum[0].stu[1].sc.english=80;

ClsNum[0].stu[2].id=3;
strcpy(ClsNum[0].stu[2].name,"韩非");
strcpy(ClsNum[0].stu[2].sex,"男");
ClsNum[0].stu[2].sc.chinese=100;
ClsNum[0].stu[2].sc.math=100;
ClsNum[0].stu[2].sc.english=100;

ClsNum[0].stu[3].id=4;
strcpy(ClsNum[0].stu[3].name,"张良");
strcpy(ClsNum[0].stu[3].sex,"男");
ClsNum[0].stu[3].sc.chinese=99.5;
ClsNum[0].stu[3].sc.math=100;
ClsNum[0].stu[3].sc.english=100;

ClsNum[0].stu[3].id=5;
strcpy(ClsNum[0].stu[4].name,"白凤");
strcpy(ClsNum[0].stu[4].sex,"男");
ClsNum[0].stu[4].sc.chinese=65;
ClsNum[0].stu[4].sc.math=30;
ClsNum[0].stu[4].sc.english=50;

//二班
ClsNum[1].Cls_number=2;
ClsNum[1].stu_Num=2;

ClsNum[1].stu[0].id=1;
strcpy(ClsNum[1].stu[0].name,"姬无夜");
strcpy(ClsNum[1].stu[0].sex,"男");
ClsNum[1].stu[0].sc.chinese=30;
ClsNum[1].stu[0].sc.math=20;
ClsNum[1].stu[0].sc.english=30;

ClsNum[1].stu[1].id=2;
strcpy(ClsNum[0].stu[1].name,"赵高");
strcpy(ClsNum[0].stu[1].sex,"男");
ClsNum[1].stu[1].sc.chinese=50;
ClsNum[1].stu[1].sc.math=90;
ClsNum[1].stu[1].sc.english=60;


void inquire_Num()
int Cls_ID;
printf("请输入需要查询的班级:\\n");
scanf("%d",&Cls_ID);
if(Cls_ID==0||ClsNum[Cls_ID-1].Cls_number==0)
printf("该班级不存在");
else
if(ClsNum[Cls_ID-1].stu_Num>=5)
printf("%d班级为大班\\n",Cls_ID);
else
printf("%d班级为小班\\n",Cls_ID);




void inset_Grade()
int clsnumber=0;
int stuId=0;
float chinese,math,english;
printf("请输入需要输入几班的成绩\\n");
scanf("%d",&clsnumber);
printf("请输入学生学号\\n");
scanf("%d",&stuId);
if(ClsNum[clsnumber-1].Cls_number==0)
printf("查无此班");
return;
else
if(ClsNum[clsnumber-1].stu[stuId-1].id==0)
printf("查无此人");
return;
else
printf("请分别输入该学生的语文 数学 英语(用空格隔开)");
scanf("%d %d %d",&chinese,&math,&english);
ClsNum[clsnumber-1].stu[stuId-1].sc.chinese=chinese;
ClsNum[clsnumber-1].stu[stuId-1].sc.math=math;
ClsNum[clsnumber-1].stu[stuId-1].sc.math=english;

printf("输入成功\\n");

上边是实现了两个功能,其他功能你对照着完善下,没有时间做,毕竟还要上班。下次非常麻烦的代码,你的奖励20可没人做

参考技术A C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
参考技术B 1.按要求输入界面;
2.按要求输入班级人数并判断大/小班,判断规则:5人以上为大班,5人及以下为小班;
3.通过键盘输入班级学生的成绩;
4.判断学生成绩是否合格,并输出。判断规则:60分以下不及格输出“补考”,60-79分输出“合格”,80-100分输出“优秀”,负分数和100分以上显示“错误”。
5.求学生成绩的最高分;
6.并计算该班级学生的总分和平均成绩并显示,规则:负分数和100分以上显示“错误”的分数不计数总分及平均成绩计算中;
程序结束界面输出。

和楼主一样的题,谁会做,麻烦帮帮我

以上是关于求助,关于c语言的单词输出程序的主要内容,如果未能解决你的问题,请参考以下文章

求助C语言高手,关于魔方矩阵的问题

C语言,dev cpp,编写的计算阶乘程序,数值较大时输出不正确,求助.

求助 :c语言程序设计 输入一个2-9之间任意一个数,然后利用循环嵌套,输出一个相应的乘法表

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。

关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。

C语言,输入一行文字,单词间以空格分隔,然后分离其中的单词按每行一个单词输出,程序有了,求解释