﻿<?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>IT博客-龙霖天网-随笔分类-c++</title><link>http://www.cnitblog.com/qlb5626267/category/7990.html</link><description>龙霖学习园地</description><language>zh-cn</language><lastBuildDate>Fri, 30 Sep 2011 04:13:42 GMT</lastBuildDate><pubDate>Fri, 30 Sep 2011 04:13:42 GMT</pubDate><ttl>60</ttl><item><title>C++实现字符串相关操作</title><link>http://www.cnitblog.com/qlb5626267/archive/2008/11/23/51819.html</link><dc:creator>龙霖</dc:creator><author>龙霖</author><pubDate>Sun, 23 Nov 2008 03:50:00 GMT</pubDate><guid>http://www.cnitblog.com/qlb5626267/archive/2008/11/23/51819.html</guid><wfw:comment>http://www.cnitblog.com/qlb5626267/comments/51819.html</wfw:comment><comments>http://www.cnitblog.com/qlb5626267/archive/2008/11/23/51819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/qlb5626267/comments/commentRss/51819.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/qlb5626267/services/trackbacks/51819.html</trackback:ping><description><![CDATA[<p><br>#include "assert.h"</p>
<p>&nbsp;</p>
<p>//计算字符串src的长度<br>int strlen(const char* str)<br>{<br>&nbsp;&nbsp;&nbsp; int i = 0;<br>&nbsp;&nbsp;&nbsp; while(*(str+i) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return i;<br>}</p>
<p>//将字符串src copy 到 des中<br>char* strcpy(char* des, const char* src)<br>{<br>&nbsp;&nbsp;&nbsp; assert((des != NULL) &amp;&amp; (src != NULL));//确认des和src均不是空指针</p>
<p>&nbsp;&nbsp;&nbsp; char* desAddress = des;</p>
<p>&nbsp;&nbsp;&nbsp; //copy<br>&nbsp;&nbsp;&nbsp; while ((*des++ = *src++) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; return desAddress;<br>}</p>
<p>//将src连接到des后面<br>char* strcat(char* des, const char* src)<br>{</p>
<p>&nbsp;&nbsp;&nbsp; char* desAddress = des;</p>
<p>&nbsp;&nbsp;&nbsp; //des指针移动到最后<br>&nbsp;&nbsp;&nbsp; while (*des++ != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //指针后退一位,指向''\0''的位置<br>&nbsp;&nbsp;&nbsp; des--;</p>
<p>&nbsp;&nbsp;&nbsp; //concat<br>&nbsp;&nbsp;&nbsp; while ((*des++ = *src++) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; return desAddress;<br>}</p>
<p>//截取src的第s到e个字符,将得到的子串返回<br>char* SubString(char* des, const char* src, int s, int e)<br>{<br>&nbsp;&nbsp;&nbsp; assert((des != NULL) &amp;&amp; (src != NULL));</p>
<p>&nbsp;&nbsp;&nbsp; char* desAddress = des;</p>
<p>&nbsp;&nbsp;&nbsp; //如果e的值超出字符串的长度,则截取从s到字符串最后的字符<br>&nbsp;&nbsp;&nbsp; int maxlength = (int)strlen(src);<br>&nbsp;&nbsp;&nbsp; if (e &gt; maxlength)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = maxlength;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //得到从e开始到s的长度为e-s的字符串<br>&nbsp;&nbsp;&nbsp; int tk = 0;<br>&nbsp;&nbsp;&nbsp; while (tk &lt;= e-s)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(des+tk) = *(src+tk+s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tk++;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //结束字符串<br>&nbsp;&nbsp;&nbsp; *(des+tk) = ''\0'';</p>
<p>&nbsp;&nbsp;&nbsp; return desAddress;<br>}</p>
<p>//将src插入到des的第p个字符之后<br>char* StringInsert(char* des, const char* src, int p)<br>{<br>&nbsp;&nbsp;&nbsp; assert((src != NULL) &amp;&amp; (des != NULL) &amp;&amp; (p &gt;= 0));<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; char* desAddress = des;</p>
<p>&nbsp;&nbsp;&nbsp; //如果位置p超出字符串的最大长度,则直接将src连接到des后面<br>&nbsp;&nbsp;&nbsp; if (p &gt;= (int)strlen(des))<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(des,src);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return desAddress;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; int srcLength = (int)strlen(src);</p>
<p>&nbsp;&nbsp;&nbsp; //存储第p个字符后面的字符串,存储在tempps中<br>&nbsp;&nbsp;&nbsp; char* tempps = new char[strlen(des)-p+1];<br>&nbsp;&nbsp;&nbsp; strcpy(tempps,des+p);</p>
<p>&nbsp;&nbsp;&nbsp; //指针pps指向第p+1个字符<br>&nbsp;&nbsp;&nbsp; char* pps = des+p;</p>
<p>&nbsp;&nbsp;&nbsp; //将src copy到第p个字符后面<br>&nbsp;&nbsp;&nbsp; while ((*pps++ = *src++) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; //指针前移一位,指向字符串结束符''\0''<br>&nbsp;&nbsp;&nbsp; pps--;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //循环,将tempps copy 到pps后面,此时pps指向des+p+srcLength-1<br>&nbsp;&nbsp;&nbsp; while ((*pps++ = *tempps++) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; //pps--;<br>&nbsp;&nbsp;&nbsp; //strcat(pps,tempps);</p>
<p>&nbsp;&nbsp;&nbsp; return desAddress;<br>}</p>
<p>//交换两个字符<br>void swap(char&amp; sc, char&amp; dc)<br>{<br>&nbsp;&nbsp;&nbsp; char temp = sc;<br>&nbsp;&nbsp;&nbsp; sc = dc;<br>&nbsp;&nbsp;&nbsp; dc = temp;<br>}</p>
<p>//交换字符串str中的第i,j个字符,以字符串数组返回<br>char* swapchars(const char* str, const int i, const int j)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);<br>&nbsp;&nbsp;&nbsp; char* dstr = new char[strlen(str)+1];<br>&nbsp;&nbsp;&nbsp; strcpy(dstr,str);<br>&nbsp;&nbsp;&nbsp; swap(*(dstr+i),*(dstr+j));</p>
<p>&nbsp;&nbsp;&nbsp; return dstr;<br>}</p>
<p>//倒置字符串,例如将"abcdef"变为"fedcba"<br>char* strrev(char* str)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);<br>&nbsp;&nbsp;&nbsp; int len = (int)strlen(str);<br>&nbsp;&nbsp;&nbsp; char* p = str;<br>&nbsp;&nbsp;&nbsp; char* data = new char[len+1];<br>&nbsp;&nbsp;&nbsp; //char* q = data;<br>&nbsp;&nbsp;&nbsp; //while (*p++ != ''\0'')<br>&nbsp;&nbsp;&nbsp; //{<br>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; //}<br>&nbsp;&nbsp;&nbsp; //p--;<br>&nbsp;&nbsp;&nbsp; //while((*data++ = *p--) != NULL)<br>&nbsp;&nbsp;&nbsp; //{<br>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; //}<br>&nbsp;&nbsp;&nbsp; //*(data+len) = ''\0'';<br>&nbsp;&nbsp;&nbsp; for (int i = len-1; i&gt;=0; i--)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(data+i) = *p++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; *(data+len) = ''\0'';</p>
<p>&nbsp;&nbsp;&nbsp; return data;<br>}</p>
<p><br>//将字符串按照单词进行倒序,例如将"just do it"变为"it do just"<br>char* wordrev(char* str)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);<br>&nbsp;&nbsp;&nbsp; char* p = str;<br>&nbsp;&nbsp;&nbsp; int len = (int)strlen(str);<br>&nbsp;&nbsp;&nbsp; int s = 0;<br>&nbsp;&nbsp;&nbsp; int e = len;<br>&nbsp;&nbsp;&nbsp; int k = 0;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; char* data = new char[len+1];</p>
<p>&nbsp;&nbsp;&nbsp; for (int i = len-1; i &gt;= 0; i--)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*if ((str[i] != '' '') &amp;&amp; (i != 0)) continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; if (i == 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; }<br>&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; {<br>&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; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[k++] = '' '';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }*/<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((*(str+i) != '' '') &amp;&amp; (i != 0)) continue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {//找到空格<br>&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; if (i == 0)//如果处理到第一个字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; }<br>&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; for (int j = s; j &lt; e; j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(data+k++) = '' '';//补齐空格<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = i;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; *(data+k) = ''\0'';<br>&nbsp;&nbsp;&nbsp; return data;<br>}</p>
<p>//从一个字符串中删除另一个字符串中出现的字符<br>char* delchars(char* str, const char* src)<br>{<br>&nbsp;&nbsp;&nbsp; assert((str != NULL) &amp;&amp; (src != NULL));</p>
<p>&nbsp;&nbsp;&nbsp; int len = (int)strlen(str);<br>&nbsp;&nbsp;&nbsp; char* data = new char[len+1];<br>&nbsp;&nbsp;&nbsp; char* p = data;</p>
<p>&nbsp;&nbsp;&nbsp; //对原数据进行一个copy,防止源数据为只读<br>&nbsp;&nbsp;&nbsp; while ((*data++ = *str++) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NULL;<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; char* res = p;<br>&nbsp;&nbsp;&nbsp; int srclen = (int)strlen(src);</p>
<p>&nbsp;&nbsp;&nbsp; while (*res != ''\0'')//对源串进行循环<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; srclen; i++)//依次与src中的每个字符进行比较<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; {<br>&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; while (*(res+i) != ''\0'')//将当前字符后面的所有字符前移一位<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&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; i++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return p;<br>}</p>
<p>//输出字符串中第一个不重复字符<br>char firstnorepeat(const char* str)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);</p>
<p>&nbsp;&nbsp;&nbsp; int len = (int)strlen(str);<br>&nbsp;&nbsp;&nbsp; char* ch = new char[len+1]; //"有重复字符"数组<br>&nbsp;&nbsp;&nbsp; char* q = ch;<br>&nbsp;&nbsp;&nbsp; int k = 0;</p>
<p>&nbsp;&nbsp;&nbsp; bool flag = true; //是否是"第一个不重复字符"的标记</p>
<p>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; len-1; i++) //对str进行循环<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag = true;//默认当前字符为"第一个不重复的字符"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断当前字符是否已经存在于"有重复字符"数组中<br>&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; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*(str+i) == ch[m])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag = false; //如果当前字符存在于"有重复字符"数组中,则标记为false<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果当前字符不再"有重复字符"数组中,则与当前字符后面的每个字符进行比较<br>&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; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*(str+i) == *(str+j))&nbsp;&nbsp;&nbsp; //如果当前字符与其后面的某个字符相等,则这个字符不是第一个不重复字符<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flag = false;&nbsp;&nbsp;&nbsp; //则这个字符不是第一个不重复字符<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ch[k++] = *(str+i);&nbsp;&nbsp;&nbsp; //将这个字符添加到"有重复字符"数组中<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(flag)&nbsp;&nbsp;&nbsp; //如果当前字符既不在"有重复字符"数组中,也不与其后面的任何一个字符相等<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return *(str+i);&nbsp;&nbsp;&nbsp; //当前字符就是"第一个不重复字符"<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ''\0'';&nbsp;&nbsp;&nbsp; //如果所有的字符都有重复,返回''\0''<br>}<br><br>//判读一个字符是否在一个字符串中,如果在,返回字符在字符串中首次出现的下标,否则返回-1<br>int IsExistInString(const char* str,char c)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);<br><br>&nbsp;&nbsp;&nbsp; int i = 0;<br>&nbsp;&nbsp;&nbsp; while (*(str+i) != ''\0'')<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (*(str+i) == c)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return i;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return -1;<br>}<br><br>//统计一个字符串str中所有字符的出现次数,<br>//data记录str中的所有不重复字符,<br>//num记录与data下标相对应的字符出现的次数<br>void StatisticChars(char* str, char* data, int* num)<br>{<br>&nbsp;&nbsp;&nbsp; assert(str != NULL);&nbsp;&nbsp;&nbsp; //确保字符串str不是空串<br><br>&nbsp;&nbsp;&nbsp; int len = (int)strlen(str);<br><br>&nbsp;&nbsp;&nbsp; //对记录次数的数组赋初值0<br>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; len; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; num[i] = 0;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; //将str中的第一个字符加入到data中<br>&nbsp;&nbsp;&nbsp; data[0] = str[0];<br>&nbsp;&nbsp;&nbsp; num[0] = 1;<br>&nbsp;&nbsp;&nbsp; int k = 1;<br><br>&nbsp;&nbsp;&nbsp; //从第一个字符开始搜索字符串<br>&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt; len; i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //找出第i个字符在data中的位置<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int j = IsExistInString(data,str[i]);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (j &lt; 0)&nbsp;&nbsp;&nbsp; //如果第i个字符不在data中<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; num[k]++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; data[k++] = str[i];<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; data[k] = ''\0'';<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else //如果第i个字符是data中下标为j的字符<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; num[j]++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //使用的例子说明<br>&nbsp;&nbsp;&nbsp; char* ch = "abca defdb ghicefghiquikelaaaaa";<br>&nbsp;&nbsp;&nbsp; char* dch = NULL;<br>&nbsp;&nbsp;&nbsp; dch = new char[50];<br>&nbsp;&nbsp;&nbsp; dch[0] = ''b'';<br>&nbsp;&nbsp;&nbsp; dch[1] = ''h'';<br>&nbsp;&nbsp;&nbsp; dch[2] = ''3'';<br>&nbsp;&nbsp;&nbsp; dch[3] = ''\0'';<br><br>&nbsp;&nbsp;&nbsp; //char* catc = SubString(dch,ch,1,3);<br>&nbsp;&nbsp;&nbsp; //StringInsert(dch,ch,1);<br>&nbsp;&nbsp;&nbsp; //printf("%s\n",dch);<br><br>&nbsp;&nbsp;&nbsp; //char* catc = strcat(dch,ch);<br><br>&nbsp;&nbsp;&nbsp; //printf("%s\n",catc);<br>&nbsp;&nbsp;&nbsp; //char* cch = NULL;<br>&nbsp;&nbsp;&nbsp; //cch = new char[100];<br>&nbsp;&nbsp;&nbsp; //cch[0] = ''1'';<br>&nbsp;&nbsp;&nbsp; //strcpy(cch,ch);<br>&nbsp;&nbsp;&nbsp; //printf("%s\n",cch);<br>&nbsp;&nbsp;&nbsp; //char* tc = strrev(ch);<br>&nbsp;&nbsp;&nbsp; //printf("%s\n",tc);<br>&nbsp;&nbsp;&nbsp; //char* tc = wordrev(ch);<br>&nbsp;&nbsp;&nbsp; //printf("%s\n",tc);<br>&nbsp;&nbsp;&nbsp; //char* dc = delchars(ch,dch);<br>&nbsp;&nbsp;&nbsp; //printf("%s\n",dc);<br>&nbsp;&nbsp;&nbsp; //char c = firstnorepeat(ch);<br>&nbsp;&nbsp;&nbsp; //printf("%c\n",c);<br>&nbsp;&nbsp;&nbsp; //int i = IsExistInString(ch,''a'');<br>&nbsp;&nbsp;&nbsp; //printf("%d\n",i);<br>&nbsp;&nbsp;&nbsp; //int len = (int)strlen(ch);<br>&nbsp;&nbsp;&nbsp; //int* num = new int[len+1];<br>&nbsp;&nbsp;&nbsp; //char* data = new char[len+1];<br>&nbsp;&nbsp;&nbsp; //data[0] = ''\0'';<br>&nbsp;&nbsp;&nbsp; //StatisticChars(ch,data,num);<br>&nbsp;&nbsp;&nbsp; //for (int i = 0; i &lt; (int)strlen(data); i++)<br>&nbsp;&nbsp;&nbsp; //{<br>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; printf("%c\t%d\n",data[i],num[i]);<br>&nbsp;&nbsp;&nbsp; //}<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br></p>
<p><br>文章出处：<a href="http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997_2.html">http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997_2.html</a></p>
<p><br>文章出处：<a href="http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997.html">http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997.html</a></p>
<img src ="http://www.cnitblog.com/qlb5626267/aggbug/51819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/qlb5626267/" target="_blank">龙霖</a> 2008-11-23 11:50 <a href="http://www.cnitblog.com/qlb5626267/archive/2008/11/23/51819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>