<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codigo Manso &#187; C++</title>
	<atom:link href="http://www.codigomanso.com/es/category/programacion/c-programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codigomanso.com</link>
	<description>Programación, informática y tecnología</description>
	<lastBuildDate>Sun, 21 Aug 2011 10:54:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>La clase std::string de C++ es una patraña</title>
		<link>http://www.codigomanso.com/es/2009/10/la-clase-stdstring-de-c-es-una-patrana/</link>
		<comments>http://www.codigomanso.com/es/2009/10/la-clase-stdstring-de-c-es-una-patrana/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 08:15:24 +0000</pubDate>
		<dc:creator>Pau Sanchez</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[std::string]]></category>
		<category><![CDATA[strings]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://www.codigomanso.com/es/?p=699</guid>
		<description><![CDATA[Aún hoy, después de un tiempo considerable sin programar en C++, sigo teniendo pesadillas sobre el manejo de cadenas.
Seguro que si has programado en C++ sabrás de lo que hablo. Es HORRIBLE. Seguro que el que diseñó (o los que diseñaron) la clase standard de C++ para strings pensaron algo como:
&#8220;Dios!! Vamos a hacer una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Aún hoy, después de un tiempo considerable sin programar en C++, sigo teniendo pesadillas sobre el manejo de cadenas.</p>
<p style="text-align: justify;">Seguro que si has programado en C++ sabrás de lo que hablo. <strong>Es HORRIBLE.</strong> Seguro que el que diseñó (o los que diseñaron) la clase standard de C++ para strings pensaron algo como:</p>
<p style="text-align: justify; padding-left: 30px;"><strong>&#8220;Dios!! Vamos a hacer una clase string que se van a cagar! Si si, se van a cagar! Vamos a hacer una clase base sobre la que puedan instanciar otras, y vamos a usar iteradores, y vamos a poner funciones de bajo nivel para que se pueda hacer de todo!&#8221;</strong></p>
<p style="text-align: justify;">Tipica paja mental. Es que claro, te pones a diseñar, te lias, te lias, y mira lo que se monta al final&#8230;</p>
<p style="text-align: justify;">Por supuesto, esta es mi opinión. También estoy seguro de que a día de hoy, algunos de ellos se arrepentirán del diseño que hicieron.</p>
<p style="text-align: justify;">Desde mi punto de vista, una clase string estándard, debería ser capaz de hacer un mínimo de operaciones. Por ejemplo, el método <strong>replace</strong> ahora mismo se le pasan dos iteradores (del texto a eliminar), y luego un string, u otros dos iteradores, que es el nuevo texto.</p>
<p style="text-align: justify;">Vale, el replace puede ser eso, bien. Pero, ¿el uso más normal de esta función, no será un &#8220;search and replace&#8221;? No es más cómodo y legible que alguien haga<strong> str.replace (&#8220;casa&#8221;, &#8220;hogar&#8221;);</strong> en vez de inicializar dos iteradores, antes de poder llamar a <strong>str.replace (it_start, it_end, &#8220;hogar&#8221;);</strong></p>
<p style="text-align: justify;">Y éste es un ejemplo un tanto rebuscado. Pongamos un ejemplo más sencillo, en C++ ¿cómo transformas la cadena en mayúsculas?</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>size_t i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> str.<span style="color: #202020;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   str<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> toupper <span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p style="text-align: justify;">¡¡Venga hombre!! Eso lo podía hacer en C</p>
<p style="text-align: justify;">Básicamente, y después de meditarlo unos minutos, la única utilidad de la clase string de C++ es que reserva y libera la memoria por nosotros (importante), permite concatenar strings al final (con el operador <strong>+=</strong> o mediante <strong>append</strong>), y probablemente el método <strong>find</strong> también pueda ser de utilidad. Todo lo demás debería revisarse. De todos modos, una clase que haga eso se programa como muuucho, en 20 minutos.</p>
<p style="text-align: justify;">Finalmente, de soporte para unicode es que ni hablamos. Lo cual me parece patético. Unicode debería ser el estándard en los compiladores de C/C++, y debería ser soportado por la clase string. Aunque bueno, esto ya es otra historia&#8230; y mejor dejamos la discusión para otro momento.</p>
<p style="text-align: justify;">Por supuesto, desde este blog mando un cordial saludo a la gente que hizo posible la clase string&#8230; <strong>sin rencor lo digo :p</strong></p>
<p style="text-align: justify;">Para el que haya seguido leyendo hasta aquí, y quiera alguna alternativa a la clase string, con soporte de unicode y que sea fácilmente portable, puede echarle un vistazo a los siguientes enlaces:</p>
<ul>
<li><a href="http://site.icu-project.org/" target="_blank">International Components for Unicode (ICU)</a>: ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications</li>
<li><a href="http://utfcpp.sourceforge.net/" target="_blank">UTF8-CPP</a>: UTF-8 with C++ in a Portable Way</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.codigomanso.com/es/2009/10/la-clase-stdstring-de-c-es-una-patrana/feed/</wfw:commentRss>
		<slash:comments>254</slash:comments>
		</item>
	</channel>
</rss>

