‘壹’ 生日相同问题,c语言编程,用字典结构解决,求解啊速度~~~
楼主要求用C,麻烦呢,如果用C++倒是方便多了,闲着没事做,简单写了下,看下就好
#include <iostream>
#include <map>
#include <list>
#include <string>
using namespace std;
struct BirthInfo
{
int month;
int day;
BirthInfo()
{
month = 0;
day = 0;
}
bool operator == (const BirthInfo& rhs ) const
{
if ( month == rhs.month && day == rhs.day )
{
return true;
}
return false;
}
bool operator < (const BirthInfo& rhs ) const
{
if ( month < rhs.month )
{
return true;
}
else if ( month == rhs.month )
{
if ( day < rhs.day )
{
return true;
}
}
return false;
}
};
struct SameBirthInfo
{
int nCount;
list<string> StrNoList;
SameBirthInfo()
{
nCount = 0;
}
};
typedef map<BirthInfo , SameBirthInfo> Result;
int main()
{
int nStudentCount = 0;
string strNo = "";
BirthInfo BirInfo;
Result result;
SameBirthInfo sameBirthInfo;
cin >> nStudentCount;
while( nStudentCount -- > 0 )
{
cin >> strNo >> BirInfo.month >> BirInfo.day;
Result::iterator iter = result.find( BirInfo );
if ( iter == result.end() )
{
//找不到
pair<Result::iterator , bool> pInsRet = result.insert( Result::value_type(BirInfo,sameBirthInfo) );
if ( pInsRet.second )
{
pInsRet.first->second.nCount = 1; //记录下此生日有一人
pInsRet.first->second.StrNoList.push_back( strNo ); //记录下此人学号
}
}
else
{
//找到
iter->second.nCount++; //同一天生日人数++
iter->second.StrNoList.push_back( strNo ); //保存下这个学生的学号
}
}
//输出所有结果
Result::const_iterator cIter = result.begin();
while ( cIter != result.end() )
{
//先输出生日
cout << cIter->first.month << " " << cIter->first.day;
//输出所有学生学号
list<string>::const_iterator cStrIter = cIter->second.StrNoList.begin();
while ( cStrIter != cIter->second.StrNoList.end() )
{
cout << " " << cStrIter->c_str();
++cStrIter;
}
cout << endl;
++cIter;
}
return 0;
}
‘贰’ 计算机三级包括:PC技术,信息管理技术,网络技术,数据库技术。那么C语言三级是属于什么的。。。
不是二级C吗?考笔试和编程
大纲:
基本要求
1、 掌握算法的基本概念。
2、 掌握基本数据结构及其操作。
3、 掌握基本排序和查找算法。
掌握逐步求精的结构化程序设计方法。
4、 掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。
考试内容
一、基本数据结构与算法
1、 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。
2、 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。
3、 线性表的定义;线性表的顺序存储结构及其插入与删除运算。
4、 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。
5、 线性单链表、双向链表与循环链表的结构及其基本运算。
6、 树的基本概念;二*树的定义及其存储结构;二*树的前序、中序和后序遍历。
7、 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。
二、程序设计基础
1、 程序设计方法与风格。
2、 结构化程序设计。
3、 面向对象的程序设计方法,对象,方法,属性及继承与多态性。
三、软件工程基础
1、 软件工程基本概念,软件声明周期概念,软件工具与软件开发环境。
2、 结构化分析方法,数据流图,数据字典,软件需求规格说明书。
3、 结构化程序设计方法,总体设计与详细设计。
4、 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试,集成测试和系统测试。
5、 程序的调试,静态调试与动态调试。
四、数据库设计基础
1、 数据库的基本概念:数据库,数据库管理系统,数据库系统。
数据模型,实体练习模型及E-R图,从E-R图导出关系数据模型。
2、 关系代数运算,包括几何运算及选择、投影、连接运算,数据库规范化理论。
数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。
公共基础知识
基本要求
1. 熟悉TURBO C集成环境。
2. 熟练掌握结构化程序设计的方法,具有良好的程序设计风格。
3. 掌握程序设计中简单的数据结构和算法。
4. TURBO C的集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。
考试内容
一、C语言的结构
1. 程序的构成,MAIN函数和其他函数。
2. 头文件,数据说明,函数的开始和结束标志。
3. 源程序的书写格式。
4. C语言的风格。
二、数据类型及其运算
1. C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。
2. C运算符的种类、运算优先级和结合性。
3. 不同类型数据间的转换与运算。
4. C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
三、基本语句
1. 表达式语句,空语句,复合语句。
2. 数据的输入与输出,输入输出函数的调用。
3. 复合语句。
4. GOTO语句和语句标号的使用。
四、选择结构程序设计
1. 用IF语句实现选择结构。
2. 用SWITCH语句实现多分支选择结构。
3. 选择结构的嵌套。
五、循环结构程序设计
1. FOR循环结构。
2. WHILE和DO WHILE循环结构。
3. CONTINUE语句和BREAK语句。
4. 循环的嵌套。
六、数组的定义和引用
1. 一维数组和多维数组的定义、初始化和引用。
2. 字符串与字符数组。
七、函数
1. 库函数的正确调用。
2. 函数的定义方法。
3. .函数的类型和返回值。
4. 形式参数与实在参数,参数值的传递。
5. 函数的正确调用,嵌套调用,递归调用。
6. 局部变量和全局变量。
7. 变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。
8. 内部函数与外部函数。
八、编译预处理
1. 宏定义:不带参数的宏定义;带参数的宏定义。
2. “文件包含”处理。
九、指针
1. 指针与指针变量的概念,指针与地址运算符。
2. 变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。
3. 用指针作函数参数。
4. 返回指针值的指针函数。
5. 指针数组,指向指针的指针,MAIN函数的命令行参数。
十、结构体(即“结构”)与共用体(即“联合”)
1. 结构体和共用体类型数据的定义方法和引用方法。
2. 用指针和结构体构成链表,单向链表的建立、输出、删除与插入。
十一、位运算
1. 位运算符的含义及使用。
2. 简单的位运算。
十二、文件操作
只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。
1. 文件类型指针(FILE类型指针)。
2. 文件的打开与关闭(FOPEN,FCLOSE)。
3. 文件的读写(FPUTC,FGETC,FPUTS,FGETS,FREAD,FWRITE,FPRINTF,FSCANF函数),文件的定位(REWIND,FSEEK函数)。
考试方式
1. 笔试:120分钟,满分100分,其中含公共基础知识部分的30分。
2. 上机:60分钟,满分100分。
‘叁’ C语言!!!!字典!!!!!
#include <iostream>
#include <map>
#include <cstdio>
#include <string>
using namespace std ;
map<string,string> m ;
int main( )
{
char s[42] , *p , *q ;
int i ;
while( gets( s ) && s[0] != '\0' )
{
p = strtok( s , " " ) ;
q = strtok( NULL , " " ) ;
m[q] = p ;
}
while( ~scanf("%s", s ) )
{
if( m.find( s ) != m.end() )
printf("%s\n", m[s].c_str() ) ;
else
printf("eh\n") ;
}
return 0 ;
}
‘肆’ 请问C语言中有类似python中字典的东西吗
没有
可以自己构造
简单说,python 比 c 更高级,就类似与 c 比汇编语言更高级那样
‘伍’ C语言想用字典数据结构的话要自己写吗标准库有吗或者第三方库有吗
标准库没有,C++有,就是个hash表类型么,比如glibc这个第三方库就有。
‘陆’ 如何用c语言的数据结构做一个英语词典,要求是:用二叉树,能实现建立词典,查找插入删除单词
#include
<stdio.h>
#include
<malloc.h>
#include
<string.h>
#include
<ctype.h>
#define
MAXWORD
100
typedef
struct
tnode{
char
*word;
int
count;
struct
tnode
*left;
struct
tnode
*right;
//
tnode(char
*s,
int
w,
tnode
*p,
tnode
*q){
//
//
}
}*tnodeptr;
struct
tnode
*addtree(struct
tnode
*,
char
*);
void
deltree(struct
tnode
*,
char
*);
void
treeprint(struct
tnode*,
FILE
*fp,
int
n,
int
&m);
void
showMenu();
void
main()
{
int
N,
k;
FILE
*fp;
struct
tnode
*root;
char
word[MAXWORD],
txt[25];
root=NULL;
while
(1)
{
showMenu();
scanf("%d",
&N);
switch(N)
{
case
1:
printf("连续输入,字符
0
结束:\n");
while
(scanf("%s",
word)!=EOF)
{
if(word[0]=='0')
break;
if(isalpha(word[0]))
root=addtree(root,
word);
}
printf("单词已插入\n");
break;
case
2:
if(root==NULL)
{printf("NULL字典\n");
break;}
printf("字典:\n");
treeprint(root,
fp,
0,k
=
1);
break;
case
3:
printf("输入删除的单词\n");
scanf("%s",
word);
deltree(root,
word);
break;
case
4:
printf("输入保存文件名:
");
scanf("%s",
txt);
strcat(txt,
".txt");
fp=fopen(txt,
"w");
if(fp==NULL)
{printf("文件写错误!");
break;}
treeprint(root,
fp,
1,
k
=
1);
fclose(fp);
printf("以保存到%s
\n",
txt);
break;
case
0:
return
;
default:
printf("输入错误!");
break;
}
}
return
;
}
struct
tnode*
talloc();
char
*strp(char*);
struct
tnode
*addtree(struct
tnode
*p,
char
*w)
{
int
cond;
if
(p==NULL)
{
p=talloc();
p->word=strp(w);
p->count=1;
p->left=p->right=NULL;
}
else
if((cond=strcmp(w,
p->word))==0)
p->count++;
else
if
(cond<0)
p->left=addtree(p->left,
w);
else
p->right=addtree(p->right,
w);
return
p;
}
/**************************************************************************
*
分4种情况:
*
1.
叶子结点:直接删除;
*
2.
结点只有左孩子:将该左孩子连接到该结点的双亲;
*
3.
结点只有右孩子:将该右孩子连接到该结点的双亲;
*
4.
结点有左右孩子:
*
a.
将该结点左子树的最右结点与该结点互换,然后删除左子树的最右结点;
*
或者
*
b.
将该结点右子树的最左结点与该结点互换,然后删除右子树的最左结点。
***************************************************************************/
void
deltree(struct
tnode
*p,
char
*w)
{
int
co,
t=0;
struct
tnode
*q=NULL,
*r=NULL;
while
(p!=NULL
&&
(co=strcmp(w,
p->word))!=0)
{
if(co
<
0)
{q
=p;
p=p->left;
t
=1;}
else
{q
=p;
p=p->right;
t
=0;}
}
if(p==NULL)
printf("没有此单词!\n");
else
if
(p->left==NULL
&&
p->right==NULL)
//<1>
{
if(t==1)q->left=
NULL;
else
q->right=NULL;
}
else
if(p->left
&&
p->right==NULL)
//<2>
{
if(t==1)
q->left=p->left;
else
q->right
=p->left;
}
else
if(p->left==NULL
&&
p->right)
//<3>
{
if(t==1)q->left=p->right;
else
q->right=p->right;
}
else
//<4>
{
r=p->left;
while(r->right)r
=r->right;
r->right
=p->right;
if(t==1)q->left
=
r;
else
q->right
=
r;
}
printf("已删除:%s
\n",
w);
return
;
}
//------------------------
//print
//------------------------
void
treeprint(struct
tnode*
p,FILE
*fp,
int
n,
int
&m)
{
if(p!=NULL)
{
treeprint(p->left,
fp,
n,m);
if(n)fprintf(fp,
"%-4d%-4d%s\n",m++,p->count,p->word);
else
printf("%-4d%-4d%s\n",m++,p->count,p->word);
treeprint(p->right,
fp,
n,m);
}
}
struct
tnode
*talloc()
{
return
(struct
tnode*)malloc(sizeof(struct
tnode));
}
char
*strp(char*s)
{
char
*p;
p=(char*)malloc(strlen(s)+1);
if(p!=NULL)
strcpy(p,
s);
return
p;
}
void
showMenu()
{
printf("\n
输入选择\t
\
\n
1.
输入单词
\
\n
2.
查看字典
\
\n
3.
删除单词
\
\n
4.
保存字典
\
\n
0.
退出\n");
}
‘柒’ 在一个C语言源代码里面有一个叫“编码字典”的结构体,设定这种结构体有什么意义啊
没用过,但根据你结构体的定义可以看出,你可以对输入字符进行自定义编码以方便某些操作
也就是说英文字符对应编码是ASC码,你可以改成其他对应字符编码
‘捌’ 如何用c语言的数据结构做一个英语词典,要求是:用二叉树,能实现建立词典,查找插入删除单词
自己写吧,别人只能告诉你思路。
如果别人替你写了,坏处
(1)浪费别人时间
(2)你什么都没学会
好处
(1)你去交差
坏处多于好处,为什么要替你写?