OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [libstdc++-v3/] [doc/] [html/] [manual/] [bk01pt05ch13s02.html] - Rev 424

Compare with Previous | Blame | View Log

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Case Sensitivity</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /><meta name="keywords" content="&#10;      ISO C++&#10;    , &#10;      library&#10;    " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="prev" href="bk01pt05ch13.html" title="Chapter 13. String Classes" /><link rel="next" href="bk01pt05ch13s03.html" title="Arbitrary Character Types" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Case Sensitivity</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13.html">Prev</a> </td><th width="60%" align="center">Chapter 13. String Classes</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" title="Case Sensitivity"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="strings.string.case"></a>Case Sensitivity</h2></div></div></div><p>
    </p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
      <a class="ulink" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
      discussions held on Usenet covered this topic in January of 1998.
      Briefly, the challenge was, <span class="quote">“<span class="quote">write a 'ci_string' class which
      is identical to the standard 'string' class, but is
      case-insensitive in the same way as the (common but nonstandard)
      C function stricmp()</span>”</span>.
   </p><pre class="programlisting">
   ci_string s( "AbCdE" );
 
   // case insensitive
   assert( s == "abcde" );
   assert( s == "ABCDE" );
 
   // still case-preserving, of course
   assert( strcmp( s.c_str(), "AbCdE" ) == 0 );
   assert( strcmp( s.c_str(), "abcde" ) != 0 ); </pre><p>The solution is surprisingly easy.  The original answer was
   posted on Usenet, and a revised version appears in Herb Sutter's
   book <span class="emphasis"><em>Exceptional C++</em></span> and on his website as <a class="ulink" href="http://www.gotw.ca/gotw/029.htm" target="_top">GotW 29</a>.
   </p><p>See?  Told you it was easy!</p><p>
     <span class="emphasis"><em>Added June 2000:</em></span> The May 2000 issue of C++
     Report contains a fascinating <a class="ulink" href="http://lafstern.org/matt/col2_new.pdf" target="_top"> article</a> by
     Matt Austern (yes, <span class="emphasis"><em>the</em></span> Matt Austern) on why
     case-insensitive comparisons are not as easy as they seem, and
     why creating a class is the <span class="emphasis"><em>wrong</em></span> way to go
     about it in production code.  (The GotW answer mentions one of
     the principle difficulties; his article mentions more.)
   </p><p>Basically, this is "easy" only if you ignore some things,
      things which may be too important to your program to ignore.  (I chose
      to ignore them when originally writing this entry, and am surprised
      that nobody ever called me on it...)  The GotW question and answer
      remain useful instructional tools, however.
   </p><p><span class="emphasis"><em>Added September 2000:</em></span>  James Kanze provided a link to a
      <a class="ulink" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
      Technical Report discussing case handling</a>, which provides some
      very good information.
   </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt05ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. String Classes </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Arbitrary Character Types</td></tr></table></div></body></html>
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.