﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Life &amp; Code-随笔分类-C++ &amp; STL</title><link>http://www.cppblog.com/lovelypig/category/1216.html</link><description>代码是咒语,我是魔法师</description><language>zh-cn</language><lastBuildDate>Fri, 24 Dec 2010 19:52:09 GMT</lastBuildDate><pubDate>Fri, 24 Dec 2010 19:52:09 GMT</pubDate><ttl>60</ttl><item><title>开闭原则</title><link>http://www.cppblog.com/lovelypig/archive/2010/12/23/137337.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Thu, 23 Dec 2010 15:52:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2010/12/23/137337.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/137337.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2010/12/23/137337.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/137337.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/137337.html</trackback:ping><description><![CDATA[&nbsp; &#8220;开闭&#8221;原则是指软件实体应当<strong>对添加开放</strong>，<strong>对修改关闭</strong>。即软件实体应该在不修改的前提下扩展，这个原则实际上为软件设计指明了目标。我们知道软件设计应当充分考虑软件的可维护性，即需求发生变化的时候软件结构能够灵活地适应这种变化。就评价软件的可维护性而言，&#8220;开闭&#8221;原则提供了一个依据。<br><br>我们的模块众多真的是因为这个原因吗? 我不赞同.<br><br>一个优秀的软件首先应该是易于测试的.只有方便测试,才能快速的定位问题. 
<img src ="http://www.cppblog.com/lovelypig/aggbug/137337.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2010-12-23 23:52 <a href="http://www.cppblog.com/lovelypig/archive/2010/12/23/137337.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost::filesystem的文件遍历</title><link>http://www.cppblog.com/lovelypig/archive/2006/12/13/16346.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Tue, 12 Dec 2006 16:29:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/12/13/16346.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/16346.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/12/13/16346.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/16346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/16346.html</trackback:ping><description><![CDATA[
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">boost/filesystem/operations.hpp</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">boost/filesystem/path.hpp</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />#include </span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">iostream</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> fs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> boost::filesystem;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> PrintAllFile(fs::path </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">full_path);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /></span>
				<span style="COLOR: #000000">
						<br />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> main( </span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> argc, </span>
				<span style="COLOR: #0000ff">char</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000"> argv[] )<br /><img id="Codehighlighter1_303_376_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_376_Open_Text.style.display='none'; Codehighlighter1_303_376_Closed_Image.style.display='inline'; Codehighlighter1_303_376_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_303_376_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_303_376_Closed_Text.style.display='none'; Codehighlighter1_303_376_Open_Image.style.display='inline'; Codehighlighter1_303_376_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_303_376_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_303_376_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    fs::path full_path( </span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">D:\\</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> ,fs::native);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    PrintAllFile(full_path);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">void</span>
				<span style="COLOR: #000000"> PrintAllFile(fs::path </span>
				<span style="COLOR: #000000">&amp;</span>
				<span style="COLOR: #000000">full_path)<br /><img id="Codehighlighter1_417_804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_417_804_Open_Text.style.display='none'; Codehighlighter1_417_804_Closed_Image.style.display='inline'; Codehighlighter1_417_804_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_417_804_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_417_804_Closed_Text.style.display='none'; Codehighlighter1_417_804_Open_Image.style.display='inline'; Codehighlighter1_417_804_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_417_804_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_417_804_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(fs::exists(full_path))<br /><img id="Codehighlighter1_447_802_Open_Image" onclick="this.style.display='none'; Codehighlighter1_447_802_Open_Text.style.display='none'; Codehighlighter1_447_802_Closed_Image.style.display='inline'; Codehighlighter1_447_802_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_447_802_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_447_802_Closed_Text.style.display='none'; Codehighlighter1_447_802_Open_Image.style.display='inline'; Codehighlighter1_447_802_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
						<span id="Codehighlighter1_447_802_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_447_802_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  fs::directory_iterator item_begin(full_path);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  fs::directory_iterator item_end;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000">( ;item_begin  </span>
								<span style="COLOR: #000000">!=</span>
								<span style="COLOR: #000000"> item_end; item_begin</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">)<br /><img id="Codehighlighter1_581_799_Open_Image" onclick="this.style.display='none'; Codehighlighter1_581_799_Open_Text.style.display='none'; Codehighlighter1_581_799_Closed_Image.style.display='inline'; Codehighlighter1_581_799_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_581_799_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_581_799_Closed_Text.style.display='none'; Codehighlighter1_581_799_Open_Image.style.display='inline'; Codehighlighter1_581_799_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span id="Codehighlighter1_581_799_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cppblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_581_799_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   <br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000">(fs::is_directory(</span>
										<span style="COLOR: #000000">*</span>
										<span style="COLOR: #000000">item_begin))<br /><img id="Codehighlighter1_627_726_Open_Image" onclick="this.style.display='none'; Codehighlighter1_627_726_Open_Text.style.display='none'; Codehighlighter1_627_726_Closed_Image.style.display='inline'; Codehighlighter1_627_726_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_627_726_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_627_726_Closed_Text.style.display='none'; Codehighlighter1_627_726_Open_Image.style.display='inline'; Codehighlighter1_627_726_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
										<span id="Codehighlighter1_627_726_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.cppblog.com/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_627_726_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    cout </span>
												<span style="COLOR: #000000">&lt;&lt;</span>
												<span style="COLOR: #000000">item_begin</span>
												<span style="COLOR: #000000">-&gt;</span>
												<span style="COLOR: #000000">native_file_string()</span>
												<span style="COLOR: #000000">&lt;&lt;</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">\t[dir]</span>
												<span style="COLOR: #000000">"</span>
												<span style="COLOR: #000000">&lt;&lt;</span>
												<span style="COLOR: #000000">endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    PrintAllFile(</span>
												<span style="COLOR: #000000">*</span>
												<span style="COLOR: #000000">item_begin);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />   </span>
										<span style="COLOR: #0000ff">else</span>
										<span style="COLOR: #000000">
												<br />
												<img id="Codehighlighter1_739_795_Open_Image" onclick="this.style.display='none'; Codehighlighter1_739_795_Open_Text.style.display='none'; Codehighlighter1_739_795_Closed_Image.style.display='inline'; Codehighlighter1_739_795_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_739_795_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_739_795_Closed_Text.style.display='none'; Codehighlighter1_739_795_Open_Image.style.display='inline'; Codehighlighter1_739_795_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />   </span>
										<span id="Codehighlighter1_739_795_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.cppblog.com/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_739_795_Open_Text">
												<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    cout </span>
												<span style="COLOR: #000000">&lt;&lt;</span>
												<span style="COLOR: #000000">item_begin</span>
												<span style="COLOR: #000000">-&gt;</span>
												<span style="COLOR: #000000">native_file_string()</span>
												<span style="COLOR: #000000">&lt;&lt;</span>
												<span style="COLOR: #000000">endl;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />   }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.cppblog.com/lovelypig/aggbug/16346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-12-13 00:29 <a href="http://www.cppblog.com/lovelypig/archive/2006/12/13/16346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>＜Dive Into Python＞节选.</title><link>http://www.cppblog.com/lovelypig/archive/2006/10/25/14120.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Wed, 25 Oct 2006 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/10/25/14120.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/14120.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/10/25/14120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/14120.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/14120.html</trackback:ping><description><![CDATA[
		<h3 class="title">例 7.14. 处理开始字符</h3>
		<pre class="screen">
				<br />．．.				<br /><tt class="prompt">＞＞＞ </tt><span class="userinput">phonePattern = re.compile(r<span class="pystring">'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$'</span>)</span> 1
<tt class="prompt">＞＞＞ </tt><span class="userinput">phonePattern.search(<span class="pystring">'(800)5551212 ext. 1234'</span>).groups()</span>                 2
<span class="computeroutput">('800', '555', '1212', '1234')<br /></span><tt class="prompt">＞＞＞ </tt><span class="userinput">phonePattern.search(<span class="pystring">'800-555-1212'</span>).groups()</span>                           3
<span class="computeroutput">('800', '555', '1212', '')<br /></span><tt class="prompt">＞＞＞ </tt><span class="userinput">phonePattern.search(<span class="pystring">'work 1-(800) 555.1212 #1234'</span>)</span>                     4<br /><tt class="prompt">＞＞＞ </tt></pre>
		<div class="calloutlist">
				<table summary="Callout list" border="0">
						<tbody>
								<tr>
										<td valign="top" align="left" width="12">1</td>
										<td valign="top" align="left">这个正则表达式和前面的几乎相同，除了在第一个记忆组（区号）前面匹配<tt class="literal">\D*</tt>，0或者多个非数字字符。注意，此处你没有记忆这些非数字字符（他们没有被括号括起来）。如果你发现他们，只是跳过他们，接着只要匹配上就开始记忆区号。<br /></td>
								</tr>
								<tr>
										<td valign="top" align="left" width="12"> 2</td>
										<td valign="top" align="left">你可以成功的解析电话号码，即使在区号前面有一个左括号。(在区号后面的右括号也已经被处理，它被看成非数字字符分隔符，由第一个记忆组后面的 <tt class="literal">\D*</tt>匹配。)<br /></td>
								</tr>
								<tr>
										<td valign="top" align="left" width="12"> 3</td>
										<td valign="top" align="left">进行仔细的检查，保证你没有破坏前面能够匹配的任何情况。由于首字符是完全可选的，这个模式匹配字符串的开始，接着是0个非数字字符，接着是一个有三个数字字符的记忆组(<tt class="literal">800</tt>)，接着是1个非数字字符（连字符），接着是一个有三个数字字符的记忆组(<tt class="literal">555</tt>)，接着是1个非数字字符（连字符），接着是一个有四个数字字符的记忆组(<tt class="literal">1212</tt>)，接着是0个非数字字符，接着是一个有0个数字位的记忆组，最后是字符串的结尾。<br /></td>
								</tr>
								<tr>
										<td valign="top" align="left" width="12"> 4</td>
										<td valign="top" align="left">此处是正则表达式让我产生了找一个硬东西挖出自己的眼睛的冲动。为什么这个电话号码没有匹配上？因为在它的区号前面有一个 <tt class="literal">1</tt>，但是你认为在区号前面的所有字符都是非数字字符(<tt class="literal">\D*</tt>)。 Aargh.</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.cppblog.com/lovelypig/aggbug/14120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-10-25 10:17 <a href="http://www.cppblog.com/lovelypig/archive/2006/10/25/14120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>罗马字母 </title><link>http://www.cppblog.com/lovelypig/archive/2006/10/24/14070.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Tue, 24 Oct 2006 01:52:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/10/24/14070.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/14070.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/10/24/14070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/14070.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/14070.html</trackback:ping><description><![CDATA[
		<div class="abstract">
				<p>&lt;载自:Dive Into Python&gt;<br /><br />你可能经常看到罗马数字，即使你没有意识到他们。你可能曾经在老电影或者电视中看到他们（“<span class="quote">版权所有 <tt class="literal">MCMXLVI</tt></span>” 而不是 “<span class="quote">版权所有<tt class="literal">1946</tt></span>”），或者在某图书馆或某大学的贡献墙上看到他们(“<span class="quote">成立于 <tt class="literal">MDCCCLXXXVIII</tt></span>”而不是“<span class="quote">成立于<tt class="literal">1888</tt></span>”)。你也可能在某些文献的大纲或者目录上看到他们。这是一个表示数字的系统，他能够真正回溯到远古的罗马帝国（因此而得名）。</p>
		</div>
		<p>在罗马数字中，利用7个不同字母进行重复或者组合来表达各式各样的数字。</p>
		<div class="itemizedlist">
				<ul>
						<li>
								<tt class="literal">I</tt> = <tt class="literal">1</tt></li>
						<li>
								<tt class="literal">V</tt> = <tt class="literal">5</tt></li>
						<li>
								<tt class="literal">X</tt> = <tt class="literal">10</tt></li>
						<li>
								<tt class="literal">L</tt> = <tt class="literal">50</tt></li>
						<li>
								<tt class="literal">C</tt> = <tt class="literal">100</tt></li>
						<li>
								<tt class="literal">D</tt> = <tt class="literal">500</tt></li>
						<li>
								<tt class="literal">M</tt> = <tt class="literal">1000</tt></li>
				</ul>
		</div>
		<p>下面是关于构造罗马数字的一些通用的规则的介绍：</p>
		<div class="itemizedlist">
				<ul>
						<li>字符是叠加的。 <tt class="literal">I</tt>表示<tt class="constant">1</tt>, <tt class="literal">II</tt>表示<tt class="literal">2</tt>, 而<tt class="literal">III</tt>表示<tt class="literal">3</tt>. <tt class="literal">VI</tt> 表示 <tt class="literal">6</tt> (字面上为逐字符相加, “<span class="quote"><tt class="literal">5</tt> 加 <tt class="literal">1</tt></span>”), <tt class="literal">VII</tt> 表示 <tt class="literal">7</tt>, <tt class="literal">VIII</tt> 表示 <tt class="literal">8</tt>. 
</li>
						<li>能够被10整除的字符(<tt class="literal">I</tt>, <tt class="literal">X</tt>, <tt class="literal">C</tt>, 和 <tt class="literal">M</tt>)至多可以重复三次. 对于<tt class="literal">4</tt>, 你则需要利用下一个最大的能够被5整除的字符进行减操作得到，你不能把<tt class="literal">4</tt> 表示成 <tt class="literal">IIII</tt>; 而应表示为 <tt class="literal">IV</tt> (比“<span class="quote"><tt class="literal">5</tt>小 <tt class="literal">1</tt></span>”)。数字<tt class="literal">40</tt>写成<tt class="literal">XL</tt> (比<tt class="literal">50</tt>小<tt class="literal">10</tt>), <tt class="literal">41</tt> 写成 <tt class="literal">XLI</tt>, <tt class="literal">42</tt> 写成 <tt class="literal">XLII</tt>, <tt class="literal">43</tt> 写成 <tt class="literal">XLIII</tt>, 而 <tt class="literal">44</tt> 写成 <tt class="literal">XLIV</tt> (比<tt class="literal">50</tt> 小<tt class="literal">10</tt>, 然后比<tt class="literal">5</tt>小<tt class="literal">1</tt>). 
</li>
						<li>类似的，对于数字 <tt class="literal">9</tt>,你必须利用下一个能够被10整除的字符进行减操作得到: <tt class="literal">8</tt> 表示为 <tt class="literal">VIII</tt>, 而 <tt class="literal">9</tt> 则表示为 <tt class="literal">IX</tt> (比<tt class="literal">10</tt> 小<tt class="literal">1</tt>), 而不是 <tt class="literal">VIIII</tt> (因为字符<tt class="literal">I</tt> 不能连续重复四次)。数字<tt class="literal">90</tt> 表示为 <tt class="literal">XC</tt>, <tt class="literal">900</tt> 表示为 <tt class="literal">CM</tt>. 
</li>
						<li>被5整除的字符不能重复。数字<tt class="literal">10</tt> 常表示为<tt class="literal">X</tt>, 而从来不用<tt class="literal">VV</tt>来表示。数字<tt class="literal">100</tt>常表示为<tt class="literal">C</tt>, 也从来不表示为 <tt class="literal">LL</tt>. 
</li>
						<li>罗马数字经常从高位到低位书写，从左到右阅读，因此不同顺序的字符意义大不相同。<tt class="literal">DC</tt> 表示 <tt class="literal">600</tt>; 而<tt class="literal">CD</tt> 是一个完全不同的数字(为<tt class="literal">400</tt>, 也就是比<tt class="literal">500</tt> 小<tt class="literal">100</tt>). <tt class="literal">CI</tt> 表示 <tt class="literal">101</tt>; 而<tt class="literal">IC</tt> 甚至不是一个合法的罗马字母（因为你不能直接从数字<tt class="literal">100</tt>减去<tt class="literal">1</tt>; 比需要写成<tt class="literal">XCIX</tt>, 意思是 比<tt class="literal">100</tt> 小<tt class="literal">10</tt>, 然后加上数字<tt class="literal">9</tt>，也就是比 <tt class="literal">10</tt>小<tt class="literal">1</tt>的数字). </li>
				</ul>
		</div>
		<a name="id2643085">
		</a>
		<table class="note" summary="" border="0">
				<tbody>
						<tr>
								<td valign="top" align="middle" width="1%" rowspan="2">
										<img title="" height="24" alt="注意" src="file:///E:/MyDoc/Ebook/Python/html/images/note.png" width="24" />
								</td>
						</tr>
						<tr>
								<td valign="top" align="left" width="99%" colspan="2">本章译者注：“被5整除的数”这个译法并不严谨，因为所有被10整除的数也能够被5整除，此处表达的含义是：那些包含有5的含义的罗马数字字符。</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/lovelypig/aggbug/14070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-10-24 09:52 <a href="http://www.cppblog.com/lovelypig/archive/2006/10/24/14070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>错误: use of undefined type 'boost::STATIC_ASSERTION_FAILURE&lt;x&gt;'  </title><link>http://www.cppblog.com/lovelypig/archive/2006/07/18/10180.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Tue, 18 Jul 2006 02:20:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/07/18/10180.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/10180.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/07/18/10180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/10180.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/10180.html</trackback:ping><description><![CDATA[在编绎BOOST::Serialization 例子的时候,遇到的错误.<br /><br />    // if your program traps here, it indicates taht your doing one of the following:<br />    // a) serializing an object of a type marked "track_never" through a pointer.<br />    // b) saving an non-const object of a type not markd "track_never)<br />    // Either of these conditions may be an indicator of an error usage of the<br />    // serialization library and should be double checked.  See documentation on<br />    // object tracking.<br /><br />解决:<br />BOOST_CLASS_TRACKING(MyClass, boost::serialization::track_never)<br /><br /><img src ="http://www.cppblog.com/lovelypig/aggbug/10180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-07-18 10:20 <a href="http://www.cppblog.com/lovelypig/archive/2006/07/18/10180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详细解说STL系列之string之家庭作业. 哈哈. :)</title><link>http://www.cppblog.com/lovelypig/archive/2006/04/11/5273.html</link><dc:creator>橙子</dc:creator><author>橙子</author><pubDate>Tue, 11 Apr 2006 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/lovelypig/archive/2006/04/11/5273.html</guid><wfw:comment>http://www.cppblog.com/lovelypig/comments/5273.html</wfw:comment><comments>http://www.cppblog.com/lovelypig/archive/2006/04/11/5273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lovelypig/comments/commentRss/5273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lovelypig/services/trackbacks/5273.html</trackback:ping><description><![CDATA[家庭作业:<br /><br />#include &lt;string&gt;<br />#include &lt;iostream&gt;<br />#include &lt;algorithm&gt;<br />#include &lt;vector&gt;<br />#include &lt;fstream&gt;<br />using namespace std;<br /><br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />        ifstream in("c:\\teststring.txt" ) ;<br /><br />        string  strtmp; <br />        string  strset = "| ,";<br /><br />        while(getline(in, strtmp, '\n'))<br />        {<br />                size_t pos1 = 0;<br />                size_t pos2 = 0;<br />                while(true)<br />                {<br />                        pos1 = strtmp.find_first_not_of(strset,pos2);<br />                        if( pos1 == string::npos)<br />                                break;<br />                        pos2 = strtmp.find_first_of(strset,pos1);<br />                        cout &lt;&lt; strtmp.substr(pos1, pos2 - pos1 )&lt;&lt;"  ";<br />                }<br />                cout &lt;&lt;endl;<br />        }<br />        return 0;<br />}<br /><br />//c:\\teststring.txt<br />张三|3456123, 湖南<br />李四,4564234| 湖北<br />王小二, 4433253|北京<br /><img src ="http://www.cppblog.com/lovelypig/aggbug/5273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lovelypig/" target="_blank">橙子</a> 2006-04-11 11:33 <a href="http://www.cppblog.com/lovelypig/archive/2006/04/11/5273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>