enum这类问题怎么编写。

xiaoke0753 2003-03-21 04:53:29
设有如下枚举类型:enum DaysOfWeek{ sun, mon, tues, wed, thurs, fri, sat } ;
编写函数
void GetDay( DaysOfWeek &day ) ;
以字符串方式从键盘读入某天的名称并将相应的枚举值赋给这一天,再编写函数
void PutDay( DaysOfWeek day )
将枚举值输出到屏幕,设计一个主程序测试这两个函数。
...全文
21 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mr_oydy 2003-03-22
  • 打赏
  • 举报
回复
#include <string>
#include <iostream>
using namespace std;
#define FILL_IN(n) {#n,n}
enum DaysOfWeek{ sun, mon, tues, wed, thurs, fri, sat, none};

struct elem{
char str[6];
DaysOfWeek DOfW;
bool operator==(DaysOfWeek& rhs){
return DOfW==rhs;
}
bool operator==(const char* rhs){
return !strcmp(str, rhs);
}
};

class change{
elem e_;
public:
template<class T>
change(T day){
elem e[7] = {FILL_IN(sun),
FILL_IN(mon),
FILL_IN(tues),
FILL_IN(wed),
FILL_IN(thurs),
FILL_IN(fri),
FILL_IN(sat)};

for(int i=0; i<7; i++){
if(e[i]==day){
e_ = e[i];
break;
}else{
strcpy(e_.str,"none");
e_.DOfW = none;
}
}
}
operator const char*(){return e_.str;}
operator DaysOfWeek(){return e_.DOfW;}
};


void main(){
DaysOfWeek d = change("fri");
string str = change(sat);
cout << d << endl << str << endl;
}
jamesfangjing 2003-03-22
  • 打赏
  • 举报
回复
我记得c++中,枚举类型会自动赋值,每个元素会被赋给一个int型的值,具体是从0开始还是1开始,我就记不清楚了!!!
这样一来,是不是就可以避免比较字符串呢?
guoxiny 2003-03-22
  • 打赏
  • 举报
回复
对switch不能这样用。switch(param)要是数值型;在C语言中看到的这种用法:
switch(ch)
{
case 'a':....break;
}
在C中a的acsii码是数值的,大家不要被此迷惑了。

枚举的话,则可以这样
DaysOfWeek dw;
switch(dw)
{
case sun:...;break;
}
因为枚举值是数值类型的。
yzb1000 2003-03-22
  • 打赏
  • 举报
回复
学习
dsangvei 2003-03-21
  • 打赏
  • 举报
回复
在C/C++中string还不能直接switch...case...
你要用strcmp来比较输入的是否与你设定的一样。当然,还要注意大小写。
bugfree 2003-03-21
  • 打赏
  • 举报
回复
string readday;
cin>>readday;
switch(readday)
{
case "sun":
GetDay(0);
.....

}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧