串比较
问题: 设计实现串比较运算的算法
算法思路
(1)比较s和t两个串共同长度范围内的对应字符:
① 若s的字符>t的字符,返回1;
② 若s的字符<t的字符,返回-1;
③ 若s的字符=t的字符,按上述规则继续比较。
(2)当(1)中对应字符均相同时,比较s和t的长度:
① 两者相等时,返回0;
② s的长度>t的长度,返回1;
③ s的长度<t的长度,返回-1。
<code class="hljs rsl has-numbering"><span class="hljs-preprocessor">#include <stdio.h></span> <span class="hljs-preprocessor">#include "sqString.h"</span> int Strcmp(SqString s,SqString t) { int i,comlen; <span class="hljs-keyword">if</span> (s.<span class="hljs-built_in">length</span><t.<span class="hljs-built_in">length</span>) comlen=s.<span class="hljs-built_in">length</span>; <span class="hljs-comment">//求s和t的共同长度</span> <span class="hljs-keyword">else</span> comlen=t.<span class="hljs-built_in">length</span>; <span class="hljs-keyword">for</span> (i=<span class="hljs-number">0</span>; i<comlen; i++) <span class="hljs-comment">//在共同长度内逐个字符比较</span> <span class="hljs-keyword">if</span> (s.data[i]>t.data[i]) <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (s.data[i]<t.data[i]) <span class="hljs-keyword">return</span> -<span class="hljs-number">1</span>; <span class="hljs-keyword">if</span> (s.<span class="hljs-built_in">length</span>==t.<span class="hljs-built_in">length</span>) <span class="hljs-comment">//s==t</span> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (s.<span class="hljs-built_in">length</span>>t.<span class="hljs-built_in">length</span>) <span class="hljs-comment">//s>t</span> <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>; <span class="hljs-keyword">else</span> <span class="hljs-keyword">return</span> -<span class="hljs-number">1</span>; <span class="hljs-comment">//s<t</span> } int main() { SqString s,t; StrAssign(s,<span class="hljs-string">"abcdefg"</span>); StrAssign(t,<span class="hljs-string">"ab"</span>); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"s:"</span>); DispStr(s); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"t:"</span>); DispStr(t); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"Strcmp(s,t)=%d\n"</span>,Strcmp(s,t)); StrAssign(s,<span class="hljs-string">"abcd"</span>); StrAssign(t,<span class="hljs-string">"abcd"</span>); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"s:"</span>); DispStr(s); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"t:"</span>); DispStr(t); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"Strcmp(s,t)=%d\n"</span>,Strcmp(s,t)); <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; }</code>
<code class="hljs rsl has-numbering"></code><p>例2:最长连续相同字符 问题: 求出串中 第一个 最长的 连续相同的 “平台” 算法思路: 循环比较相邻的字符 ① 若相邻字符相等,累加相同字符的长度 ② 否则 更新最长连续相同字符信息 为继续找出做好准备</p><pre class="prettyprint" name="code"><code class="hljs rsl has-numbering"><span class="hljs-preprocessor">#include <stdio.h></span> <span class="hljs-preprocessor">#include "sqString.h"</span> void LongestString(SqString s,int &index,int &<span class="hljs-built_in">max</span>) { int <span class="hljs-built_in">length</span>=<span class="hljs-number">1</span>,i=<span class="hljs-number">0</span>,start=<span class="hljs-number">0</span>; <span class="hljs-comment">//length保存平台的长度</span> index=<span class="hljs-number">0</span>,<span class="hljs-built_in">max</span>=<span class="hljs-number">0</span>; <span class="hljs-comment">//index保存最长平台在s中的开始位置,max保存其长度</span> <span class="hljs-keyword">while</span> (i<s.<span class="hljs-built_in">length</span>-<span class="hljs-number">1</span>) <span class="hljs-keyword">if</span> (s.data[i]==s.data[i+<span class="hljs-number">1</span>]) { i++; <span class="hljs-built_in">length</span>++; } <span class="hljs-keyword">else</span> <span class="hljs-comment">//上一个平台结束</span> { <span class="hljs-keyword">if</span> (<span class="hljs-built_in">max</span><<span class="hljs-built_in">length</span>) <span class="hljs-comment">//当前平台长度大,则更新max</span> { <span class="hljs-built_in">max</span>=<span class="hljs-built_in">length</span>; index=start; } i++; start=i; <span class="hljs-comment">//初始化下一个平台的起始位置和长度</span> <span class="hljs-built_in">length</span>=<span class="hljs-number">1</span>; } } int main() { SqString s; int i,j,k; StrAssign(s,<span class="hljs-string">"aabcsaaaabcdeab"</span>); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"s:"</span>); DispStr(s); LongestString(s,i,j); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"最长平台:"</span>); <span class="hljs-keyword">for</span> (k=i; k<i+j; k++) <span class="hljs-built_in">printf</span>(<span class="hljs-string">"%c"</span>,s.data[k]); <span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n"</span>); <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; }</code>