zoukankan      html  css  js  c++  java
  • 数据结构:串的一些基本操作

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<math.h>
    #include<map>
    #define INF 0xffffffff
    #define MAX 10005
    #define Temp 1000000000
    #define MOD 1000000007

    void OutPut(char str[])//打印串
    {
    printf("%s ",str);
    }

    void StryCopy(char str1[],char str2[])//复制串身str2到str1
    {
    int i;
    for(i=0;str2[i]!='';i++)
    str1[i]=str2[i];
    str1[i]='';
    }

    bool StrEmpty(char str[])//判断是否为空串
    {
    if(str[0]=='')
    return false;
    return true;
    }

    bool StrCpy(char str1[],char str2[])//比较串str1是否大于身str2
    {
    int i=0,j=0;
    while(str1[i]!='' && str2[j]!='')
    {
    if(str1[i] > str2[j])
    return true;
    else if(str1[i] < str2[j])
    return false;
    else
    {
    i++;
    j++;
    }
    }
    if(str1[i]!='')
    return true;
    return false;
    }

    int StrLength(char str[])//计算串的长度
    {
    int length=0;
    for(int i=0;str[i]!='';i++)
    length++;
    return length;
    }

    void StrClear(char str[])//清空串
    {
    str[0]='';
    }

    void StrCat(char str1[],char str2[])//将串str2添加到串str1
    {
    int len1=StrLength(str1);
    int len2=StrLength(str2);
    for(int i=0;i<len2;i++)
    str1[len1+i]=str2[i];
    str1[len1+len2]='';
    }

    void StrSub(char str[],char sub[],int pos,int len)//获取从pos位置起长度为len的子串
    {
    int i;
    for(i=0;i<len;i++)
    {
    sub[i]=str[pos-1+i];
    }
    sub[i]='';
    }

    int Find_Index(char str1[],char str2[])//查找是否含有子串,并返回起始下标
    {
    for(int i=0;str1[i]!='';i++)
    {
    if(str1[i]==str2[0])
    {
    for(int j=0;str2[j]!='';j++)
    {
    if(str1[i+j]!=str2[j])
    break;
    }
    if(str2[i]=='')
    return i+1;
    }
    }
    return -1;
    }

    void StrInsert(char str1[],char str2[],int pos)//从pos位置起,插入一个串
    {
    int len1=StrLength(str1);
    int len2=StrLength(str2);
    int j=0;
    for(int i=len1-1;i>=pos-1;i--)
    str1[i+len2]=str1[i];
    for(int i=0;i<len2;i++)
    str1[pos-1+(j++)]=str2[i];
    }

    void StrDelete(char str[],int pos,int len)//从pos位置起,删除长度为len的串
    {
    int len1=StrLength(str);
    for(int i=pos-1;i<(pos+len-1);i++)
    str[i]=str[i+len];
    str[len1-len]='';
    }

    void InPut(char str1[],char str2[])
    {
    scanf("%s%s",str1,str2);
    }

    int main()//主函数仅为演示
    {
    char str1[MAX],str2[MAX],sub[MAX];
    InPut(str1,str2);
    OutPut(str1);
    int len1=StrLength(str1);
    int len2=StrLength(str2);
    printf("串的长度为: ");
    printf("%d %d ",len1,len2);
    StrCat(str1,str2);
    OutPut(str1);
    StrSub(str1,sub,2,3);
    OutPut(sub);
    int index=Find_Index(str1,str2);
    if(index)
    printf("子串起始位置为: %d ",index);
    else
    printf("ERRER ");
    StrInsert(str1,str2,2);
    OutPut(str1);
    StrDelete(str1,2,len2);
    OutPut(str1);
    StrClear(str1);
    if(!StrEmpty(str1))
    printf("NULL ");
    return 0;
    }

  • 相关阅读:
    将数据库表直接导到Visio中!
    常用条形码
    Winfrom支持多语言解决方案!(总结)
    2011年工作总结
    根据当前时间计算周次!(每年的第一天属于第一周 C#实现)
    [NOI2012] 迷失游乐园 概率 期望 基环树DP
    codeforces CF36E Two Paths 欧拉回路
    POJ1201 Intervals & TYVJ 1589 西瓜种植 差分约束
    codeforces CF983E NN country 树上倍增
    codeforces CF402E Strictly Positive Matrix Tarjan强连通分量
  • 原文地址:https://www.cnblogs.com/alan-W/p/6001784.html
Copyright © 2011-2022 走看看