实现cin>>complex
2015-03-11 15:52
1431 查看
我以前的实现版本点击打开是是有问题的,因为我把整个流都弄下来了。
比如流里假如有(12, 3))87 ,实际上cin>>complex只是取流里的(12,3)而剩下的)87是不动它,由接下来的其他流读取。
而我则是整个都取下来了。虽然我的功能能够使用词法分析实现,但是不够优雅,在C++上更是错误的。
比如流里假如有(12, 3))87 ,实际上cin>>complex只是取流里的(12,3)而剩下的)87是不动它,由接下来的其他流读取。
而我则是整个都取下来了。虽然我的功能能够使用词法分析实现,但是不够优雅,在C++上更是错误的。
basic_istream_char* __cdecl basic_istream_char_read_complex_double(basic_istream_char *this, complex_double *v) { double r; basic_ios_char *base = basic_istream_char_get_basic_ios(this); TRACE("(%p %p)\n", this, v);//wine里用来追踪变量的,功能跟printf差不多 /* 因为正确的格式里只有real 和 (real)还有(real,imaginary),所以只会在流里取相应字符 */ ws_basic_istream_char(this);//先用ws()将流里开头的空白都去掉 //用peek()看看流里第一个字符是什么,不取出来 if(basic_istream_char_peek(this) == '(') { char c; basic_istream_char_get(this);//用get()取流第一个字符'(',不保存(因为不需要) basic_istream_char_read_double(this, &r);//读流里的double if(ios_base_fail(&base->base))//如果不是double类型,返错退出 return this; ws_basic_istream_char(this);//接着又用ws()去掉接下来的空格(' ','\t') c = basic_istream_char_peek(this);//用peek()把字符存到c,但不从流里取出 if(c == ',') { double i; basic_istream_char_get(this);//字符是',',complex正常格式,取出 basic_istream_char_read_double(this, &i);//继续读double if(ios_base_fail(&base->base))//返回 return this; ws_basic_istream_char(this);//继续去空格 c = basic_istream_char_peek(this);//用法同上 if(c == ')') { /* 格式(real, imag) 所以get从流里取走'('*/ basic_istream_char_get(this); v->real = r; v->imag = i; }else { basic_ios_char_setstate(base, IOSTATE_failbit); return this; } }else if(c == ')') { /* 格式 (real) */ basic_istream_char_get(this); v->real = r; v->imag = 0; }else { basic_ios_char_setstate(base, IOSTATE_failbit); return this; } }else { /* 格式 real */ basic_istream_char_read_double(this, &r); if(ios_base_fail(&base->base)) return this; //如果是(12)这样的格式,只是取实数,虚数为0 v->real = r; v->imag = 0; } return this; }
相关文章推荐
- while(cin >> buf)在linux下实现停止输入的办法
- 实现ASP页面在做查询时会出现 “正在查询>>>”等提示
- 在Delphi中实现的“汽车每跑6000公里(>=6000)换机油”的提示功能!
- 汇编->十进制到十六进制数转换的程序实现
- while(cin>>str)无法结束的问题
- 设计模式、用Delphi实现---->Wrapper pattern
- 分布式编程->XML Webservice实现原理及相关知识
- 如何用Java实现Web服务器(转-->)
- 用<TABLE>语句来实现圆角表格可以省去制作圆角图片之苦!
- 分布式编程->XML Webservice实现原理及相关知识
- Control Study -> 键盘模拟鼠标(实现用键盘操作鼠标光标)(示例代码下载)
- 分布式编程->Remoting的一个代码示例(借助Remoting实现发送信息功能)
- 用IFormatter实现>存储容器(功能:实现游戏保存和读取).
- JavaScript escape/unescape编码的实现->>网页教学网Webjx.Com 提供最新最快的网页技术
- C#(文字类型转换)【下拉菜单->C#字体CodeBehind】附:【用C#实现生成PDF文档】
- Collection -> 用SortedList实现排序
- 用IFormatter实现>存储容器(功能:实现游戏保存和读取).
- Control Study -> 实现:用鼠标拖动图片
- Control Study -> 实现:用鼠标拖动图片
- Collection -> 用SortedList实现排序