串的顺序存储结构——顺序串

串比较
问题: 设计实现串比较运算的算法
算法思路
(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>

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值