精选文章

Android下使用TCPDUMP抓包Wireshark分析数据 如果想分析Android下某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump生成Wireshark识别的pcap文件,然后将pcap文件下载到电脑上,用电脑上的Wireshark加载pcap文件,通过Wireshark分析tcpdump抓取的数据。...

继续阅读

Mac下部署Android开发环境附加NDK 作为开发者,我们深有体会,不管是进行什么开发,为了部署开发环境,我们往往需要折腾很长时间、查阅很多资料才能完成,而且这次折腾完了,下次到了另一台新电脑上又得重新来过,整个部署过程记得还好,要是不记得又得重新开始,而且遇到Android这种GFW阻隔了开发资源下载链接的环境部署,又尤其浪费时间。所以这也是我写下这篇教程的初衷跟动力源泉,希望大家参考了这篇教程以后可以轻轻松松在Mac系统下将Android环境部署好。...

继续阅读

稍顯嚴肅的台中 坦白說,留在腦海中的台中影像並不多,來台灣之前在Booking上只訂到了台中的一家青旅,第一次住青旅有些不習慣,幹什麼都放不開。 同屋的一個男生是台灣人,不過一年中四分之三的時間在上海跟北京,這麼說來跟我還是比較有共同話題的。得之我準備花15天的時間環島,覺得太倉促了,他們大學時期花一個半月的時間也不見得能將台灣島給逛完。我只能無奈地表示,兩岸允許的簽證時間有限,自己的空閒時間更有限,只能用打卡式的旅行了,我深知正真地旅行應該慢下來,融入當地的環境,感受他們的風土人情,但第一次只能這樣作罷,以後換成民進黨上台,形勢會變成怎樣還不得而知,能否再過來還是個未知數。而我一向信奉的人生格言是秉燭夜遊,活在當下,所以,理解自己吧。...

继续阅读

為之留戀的新竹 來新竹之前本沒有對她有過高的期待,慢慢對她加分要從桃園火車站出發前往新竹開始。 在桃園火車站的候車月台上,有醒目的旅遊資料發放處,這上面的擺放的全是新竹的旅遊宣傳資料,關鍵的是資料做得非常簡潔易懂,而接下來一天的新竹之行就全部是依據這份寶典的指引來完成的。...

继续阅读

從桃園開始台灣之行 初到台灣恰逢華夏銀行系統升級,特意準備的華夏銀聯卡在桃園機場沒能派上用場,只好用建行在機場5000塊,算下來是很不划算的,但是沒辦法,誰叫我出機場就得花錢呢。 從機場打車到桃園的酒店,花了將近六百塊新台幣,到酒店時五點多,天已經漸亮了,洗漱完等到七點吃過早餐就開始補覺囉,一覺醒來已是中午,帶著換下來的衣服外出找自助洗衣店,順便覓食。...

继续阅读

  • Prev
  • Next

串类型定义及其表示与实现

文章分类 : C语言, 应用与编程, 数据结构

1、串(String)(或字符串)是由零个或多个字符组成的有序序列。

2、串赋值StrAssign、串比较StrCompare、求串长StrLength、串联接Concat以及求字串SubString 5种操作构成串类型的最小操作子集,即这些操作不可能利用其他串操作来实现,反之,其他串操作(除串清除ClearString跟串销毁DestoryString外)均可在这个最小操作子集上实现。

3、利用求串长StrLength、串比较StrCompare跟求字串SubString实现搜索指定字串的C语言伪代码实现如下:    

int Index(String CppLive, String T, int pos)
{
    //T为非空串,若主串CppLive中第pos个字符之后存在与T相等的字串
    //则返回第一个这样的字串在CppLive中的位置,否则返回0
    if (pos > 0)
    {
        n = StrLength(CppLive); m = StrLength(T); i = pos;
        while (i <= n-m+1)
        {
            SubString(sub, CppLive, i, m);
            if (StrCompare(sub, T) != 0) ++i;
            else return i; //返回字串在主串中的位置
        }
    }
    return 0; //CppLive中不存在与T相等的子串
}

4、串的堆分配存储表示以及基本操作的C语言算法描述伪代码如下:

typedef struct {
    char *ch; //若是非空字符串,则按串长分配存储空间,否则
    int length; //串长度
}HString;
Status StrAssign(HString &T, char *chars)
{
    //生成一个其值等于串常量chars的串T
    if (T.ch) free(T.ch); //释放T原有空间
    for (i = 0, c = chars; c; ++i, ++c); //求chars的长度i
    if (!i) {T.ch = NULL; T.length = 0;}
    else
    {
        if (!(T.ch = (char *)malloc(i * sizeof(char))))
            exit(OVERFLOW);
        T.ch[0..i-1] = chars[0..i-1];
        T.length = i;
    }
    return OK;
}
int StrLength(HString S)
{
    //返回S的元素个数,称为串的长度
    return S.length;
}
int StrCompare(HString S, HString T)
{
    //若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0
    for (i=0; i<S.length && i<T.length; ++i)
    if (S.ch[i] != T.ch[i]) return S.ch[i] -T.ch[i];
    return S.length - T.length;
}
Status ClearString(HString &S)
{
    //将S清为空串
    if (S.ch) {free(S.ch); S.ch = NULL;}
    S.length = 0;
    return OK;
}
Status Concat(HString &T, HString S1, HString S2)
{
    //用T返回由S1和S2联接而成的新串
    if (T.ch) free(T.ch); //释放旧空间
    if (!(T.ch = (char *)malloc(S1.length +S2.length)*sizeof(char)))
        exit(OVERFLOW);
    T.ch[0..S1.length-1] = S1.ch[0..S1.length-1];
    T.length = S1.length +S2.length;
    T.ch[S1.length..T.length-1] = S2.ch[0..S2.length-1];
    return OK;
}
Status SubString(HString &SUb, HString S, int pos, int len)
{
    //用Sub返回串S的第pos个字符起长度为len的字串
    //其中,1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1
    if (pos < 1 || pos > S.length || len < 0 || len > S.length -pos + 1)
        return ERROR;
    if (Sub.ch) free(Sub.ch); //释放旧空间
    if (!len) {Sub.ch = NULL; Sub.length = 0;} //空子串
    else
    {
        Sub.ch = (char *)malloc(len * sizeof(char));
        Sub.ch[0..len-1] = S.ch[pos-1..pos+len-2];
        Sub.length = len;
    }
    reurn OK;
}

除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。

本文地址:https://www.cpplive.com/html/1349.html

这里因为你的留言而存在!!!

You must be logged in to post a comment.