<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[C++实现字符串相关操作]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 14 May 2010 16:16:52 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/><div class="code">#include &quot;assert.h&quot; <br/> <br/><br/>//计算字符串src的长度<br/>int strlen(const char* str)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int i = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while(*(str+i) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return i;<br/>&#125;<br/><br/>//将字符串src copy 到 des中<br/>char* strcpy(char* des, const char* src)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert((des != NULL) &amp;&amp; (src != NULL));//确认des和src均不是空指针<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;char* desAddress = des;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//copy<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ((*des++ = *src++) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return desAddress;<br/>&#125;<br/><br/>//将src连接到des后面<br/>char* strcat(char* des, const char* src)<br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;char* desAddress = des;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//des指针移动到最后<br/>&nbsp;&nbsp;&nbsp;&nbsp;while (*des++ != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//指针后退一位,指向&#039;&#039;&#92;0&#039;&#039;的位置<br/>&nbsp;&nbsp;&nbsp;&nbsp;des--;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//concat<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ((*des++ = *src++) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return desAddress;<br/>&#125;<br/><br/>//截取src的第s到e个字符,将得到的子串返回<br/>char* SubString(char* des, const char* src, int s, int e)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert((des != NULL) &amp;&amp; (src != NULL));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;char* desAddress = des;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//如果e的值超出字符串的长度,则截取从s到字符串最后的字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;int maxlength = (int)strlen(src);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (e &gt; maxlength)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e = maxlength;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//得到从e开始到s的长度为e-s的字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;int tk = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while (tk &lt;= e-s)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(des+tk) = *(src+tk+s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tk++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//结束字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;*(des+tk) = &#039;&#039;&#92;0&#039;&#039;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return desAddress;<br/>&#125;<br/><br/>//将src插入到des的第p个字符之后<br/>char* StringInsert(char* des, const char* src, int p)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert((src != NULL) &amp;&amp; (des != NULL) &amp;&amp; (p &gt;= 0));<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* desAddress = des;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//如果位置p超出字符串的最大长度,则直接将src连接到des后面<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (p &gt;= (int)strlen(des))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(des,src);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return desAddress;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int srcLength = (int)strlen(src);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//存储第p个字符后面的字符串,存储在tempps中<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* tempps = new char&#91;strlen(des)-p+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(tempps,des+p);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//指针pps指向第p+1个字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* pps = des+p;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//将src copy到第p个字符后面<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ((*pps++ = *src++) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//指针前移一位,指向字符串结束符&#039;&#039;&#92;0&#039;&#039;<br/>&nbsp;&nbsp;&nbsp;&nbsp;pps--;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//循环,将tempps copy 到pps后面,此时pps指向des+p+srcLength-1<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ((*pps++ = *tempps++) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//pps--;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//strcat(pps,tempps);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return desAddress;<br/>&#125;<br/><br/>//交换两个字符<br/>void swap(char&amp; sc, char&amp; dc)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char temp = sc;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sc = dc;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dc = temp;<br/>&#125;<br/><br/>//交换字符串str中的第i,j个字符,以字符串数组返回<br/>char* swapchars(const char* str, const int i, const int j)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* dstr = new char&#91;strlen(str)+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(dstr,str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;swap(*(dstr+i),*(dstr+j));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return dstr;<br/>&#125;<br/><br/>//倒置字符串,例如将&quot;abcdef&quot;变为&quot;fedcba&quot;<br/>char* strrev(char* str)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (int)strlen(str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* p = str;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* data = new char&#91;len+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* q = data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//while (*p++ != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//p--;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//while((*data++ = *p--) != NULL)<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//*(data+len) = &#039;&#039;&#92;0&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = len-1; i&gt;=0; i--)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(data+i) = *p++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*(data+len) = &#039;&#039;&#92;0&#039;&#039;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;return data;<br/>&#125;<br/><br/><br/>//将字符串按照单词进行倒序,例如将&quot;just do it&quot;变为&quot;it do just&quot;<br/>char* wordrev(char* str)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* p = str;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (int)strlen(str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;int s = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int e = len;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int k = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* data = new char&#91;len+1&#93;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = len-1; i &gt;= 0; i--)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*if ((str&#91;i&#93; != &#039;&#039; &#039;&#039;) &amp;&amp; (i != 0)) continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = i + 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i == 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = s; j &lt; e; j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;k++&#93; = str&#91;j&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;k++&#93; = &#039;&#039; &#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;*/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((*(str+i) != &#039;&#039; &#039;&#039;) &amp;&amp; (i != 0)) continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;//找到空格<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = i + 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i == 0)//如果处理到第一个字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将获得的单词(源串中从第s到第e个字符)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int j = s; j &lt; e; j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(data+k++) = *(str+j);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(data+k++) = &#039;&#039; &#039;&#039;;//补齐空格<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e = i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*(data+k) = &#039;&#039;&#92;0&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return data;<br/>&#125;<br/><br/>//从一个字符串中删除另一个字符串中出现的字符<br/>char* delchars(char* str, const char* src)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert((str != NULL) &amp;&amp; (src != NULL));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (int)strlen(str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* data = new char&#91;len+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* p = data;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//对原数据进行一个copy,防止源数据为只读<br/>&nbsp;&nbsp;&nbsp;&nbsp;while ((*data++ = *str++) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;char* res = p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int srclen = (int)strlen(src);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while (*res != &#039;&#039;&#92;0&#039;&#039;)//对源串进行循环<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; srclen; i++)//依次与src中的每个字符进行比较<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*res == *(src+i))//如果当前字符与src中的某个字符相等<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (*(res+i) != &#039;&#039;&#92;0&#039;&#039;)//将当前字符后面的所有字符前移一位<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(res+i) = *(res+i+1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return p;<br/>&#125;<br/><br/>//输出字符串中第一个不重复字符<br/>char firstnorepeat(const char* str)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (int)strlen(str);<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* ch = new char&#91;len+1&#93;; //&quot;有重复字符&quot;数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* q = ch;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int k = 0;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;bool flag = true; //是否是&quot;第一个不重复字符&quot;的标记<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; len-1; i++) //对str进行循环<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag = true;//默认当前字符为&quot;第一个不重复的字符&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断当前字符是否已经存在于&quot;有重复字符&quot;数组中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int m = 0;m &lt; (int)strlen(ch); m++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*(str+i) == ch&#91;m&#93;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag = false; //如果当前字符存在于&quot;有重复字符&quot;数组中,则标记为false<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果当前字符不再&quot;有重复字符&quot;数组中,则与当前字符后面的每个字符进行比较<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int j = i+1; j &lt; len &amp;&amp; flag; j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*(str+i) == *(str+j))&nbsp;&nbsp;&nbsp;&nbsp;//如果当前字符与其后面的某个字符相等,则这个字符不是第一个不重复字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag = false;&nbsp;&nbsp;&nbsp;&nbsp;//则这个字符不是第一个不重复字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&#91;k++&#93; = *(str+i);&nbsp;&nbsp;&nbsp;&nbsp;//将这个字符添加到&quot;有重复字符&quot;数组中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(flag)&nbsp;&nbsp;&nbsp;&nbsp;//如果当前字符既不在&quot;有重复字符&quot;数组中,也不与其后面的任何一个字符相等<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return *(str+i);&nbsp;&nbsp;&nbsp;&nbsp;//当前字符就是&quot;第一个不重复字符&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#039;&#039;&#92;0&#039;&#039;;&nbsp;&nbsp;&nbsp;&nbsp;//如果所有的字符都有重复,返回&#039;&#039;&#92;0&#039;&#039;<br/>&#125;<br/><br/>//判读一个字符是否在一个字符串中,如果在,返回字符在字符串中首次出现的下标,否则返回-1<br/>int IsExistInString(const char* str,char c)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int i = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;while (*(str+i) != &#039;&#039;&#92;0&#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*(str+i) == c)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br/>&#125;<br/><br/>//统计一个字符串str中所有字符的出现次数,<br/>//data记录str中的所有不重复字符,<br/>//num记录与data下标相对应的字符出现的次数<br/>void StatisticChars(char* str, char* data, int* num)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;assert(str != NULL);&nbsp;&nbsp;&nbsp;&nbsp;//确保字符串str不是空串<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (int)strlen(str);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//对记录次数的数组赋初值0<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; len; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&#91;i&#93; = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//将str中的第一个字符加入到data中<br/>&nbsp;&nbsp;&nbsp;&nbsp;data&#91;0&#93; = str&#91;0&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;num&#91;0&#93; = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int k = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//从第一个字符开始搜索字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 1; i &lt; len; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找出第i个字符在data中的位置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int j = IsExistInString(data,str&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (j &lt; 0)&nbsp;&nbsp;&nbsp;&nbsp;//如果第i个字符不在data中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&#91;k&#93;++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;k++&#93; = str&#91;i&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;k&#93; = &#039;&#039;&#92;0&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else //如果第i个字符是data中下标为j的字符<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&#91;j&#93;++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/>int _tmain(int argc, _TCHAR* argv&#91;&#93;)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//使用的例子说明<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* ch = &quot;abca defdb ghicefghiquikelaaaaa&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* dch = NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dch = new char&#91;50&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dch&#91;0&#93; = &#039;&#039;b&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dch&#91;1&#93; = &#039;&#039;h&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dch&#91;2&#93; = &#039;&#039;3&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;dch&#91;3&#93; = &#039;&#039;&#92;0&#039;&#039;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* catc = SubString(dch,ch,1,3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//StringInsert(dch,ch,1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,dch);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* catc = strcat(dch,ch);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,catc);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* cch = NULL;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//cch = new char&#91;100&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//cch&#91;0&#93; = &#039;&#039;1&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//strcpy(cch,ch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,cch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* tc = strrev(ch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,tc);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* tc = wordrev(ch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,tc);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* dc = delchars(ch,dch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%s&#92;n&quot;,dc);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char c = firstnorepeat(ch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%c&#92;n&quot;,c);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//int i = IsExistInString(ch,&#039;&#039;a&#039;&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//printf(&quot;%d&#92;n&quot;,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//int len = (int)strlen(ch);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//int* num = new int&#91;len+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//char* data = new char&#91;len+1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//data&#91;0&#93; = &#039;&#039;&#92;0&#039;&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//StatisticChars(ch,data,num);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//for (int i = 0; i &lt; (int)strlen(data); i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%c&#92;t%d&#92;n&quot;,data&#91;i&#93;,num&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&#125;</div><br/><br/>来源：http://simawenxue.blog.hexun.com/34997542_d.html<br/><br/><br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] C++实现字符串相关操作]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>