18版考研数据结构天勤课后习题代码-串【完】

#include <iostream>
using namespace std;
#define maxSize 101
typedef struct String
{
    char data[maxSize];
    int length;
}String;
/*
//把值为ch1的字符替换为ch2  天勤P103 二 1(1)
void Replace(String &str,char ch1,char ch2)
{
    int len=str.length;
    if(len<=0)
        return;
    for(int i=0;i<len;i++)
    {
        if(str.data[i]==ch1)
        {
            str.data[i]=ch2;
        }
    }
}
int main()
{
    String str;
    int n;
    cin>>n;
    str.length=n;
    for(int i=0;i<n;i++)
    {
        cin>>str.data[i];
    }
    Replace(str,'a','b');
    for(int i=0;i<n;i++)
    {
        cout<<str.data[i]<<endl;
    }
}
//7
//a f e a a a a
*/


/*
//字符串逆转 天勤P103 二 1(2)
void reverse(String &str)
{
    int len=str.length;
    int i=0;
    int j=len-1;
    while(i<j)
    {
        int t=str.data[i];
        str.data[i]=str.data[j];
        str.data[j]=t;
        i++;
        j--;
    }
}
int main()
{
    String str;
    int n;
    cin>>n;
    str.length=n;
    for(int i=0;i<n;i++)
    {
        cin>>str.data[i];
    }
    reverse(str);
    for(int i=0;i<n;i++)
    {
        cout<<str.data[i]<<endl;
    }
}

//7
//a f e a a a a
*/


/*
//删除值为ch的节点 天勤P103 二 1(3)
void Delete(String &str,char ch)
{
    for(int i=0;i<str.length;i++)  //str.length在变!!不能赋值给len再写循环!!
    {
        if(str.data[i]==ch)
        {
            for(int j=i+1;j<str.length;j++)
            {
                str.data[j-1]=str.data[j];
            }
            str.length--;
        }
    }
}
int main()
{
    String str;
    int n;
    cin>>n;
    str.length=n;
    for(int i=0;i<n;i++)
    {
        cin>>str.data[i];
    }
    Delete(str,'a');
    for(int i=0;i<str.length;i++)
    {
        cout<<str.data[i]<<endl;
    }
}
//7
//a f e a a a a
*/

/*
//子串匹配 天勤P103 二 1(4)
int KMP(String str,String substr,int pos)
{
    int len1=str.length;
    int len2=substr.length;
    int i=pos,j=0;
    int k=i;
    if(len1<=0||len2<=0)
        return -1;
    while(i<len1)
    {
        while(j<len2)
        {
            if(substr.data[j]!=str.data[i])
            {
                break;
            }
            j++;
            i++;
        }
        if(j<len2)
        {
            j=0;
            i=++k;
        }
        else
        {
            return k;
        }
    }
    return -1;
}
int main()
{
    String str,substr;
    int n,n2;
    cin>>n>>n2;
    str.length=n;
    substr.length=n2;
    for(int i=0;i<n;i++)
    {
        cin>>str.data[i];
    }
    for(int i=0;i<n2;i++)
    {
        cin>>substr.data[i];
    }
    int d=KMP(str,substr,0);
    cout<<d<<endl;
}
//5 3
//a s d f g
//d f g
*/


/*
//删除i~i+j-1的元素 天勤P103 二 2
int Delete(String &str,int i,int j)
{
    int len=str.length;
    if(i<1||i>len)
        return 0;
    int k=i+j;
    if(k>len)
    {
        str.length=i-1;   //注意是i-1,因为i也被删了
        return 1;
    }
    else
    {
        for(int s=i+j;s<=len;s++)
        {
            str.data[s-j]=str.data[s];
        }
        str.length-=j;
        return 1;
    }
}
int main()
{
    String str;
    int n;
    cin>>n;
    str.length=n;
    for(int i=1;i<=n;i++)
    {
        cin>>str.data[i];
    }
     Delete(str,4,5);
    for(int i=1;i<=str.length;i++)
    {
        cout<<str.data[i]<<endl;
    }
}
*/


/*
//用其他字符串替换i~j间的字符 天勤P103 二 3
int Replace(String &str1,String str2,int i,int j)
{
    int len1=str1.length;
    int len2=str2.length;
    if(i<1||j>len1||(j-i+1)>len2)
    {
        return 0;
    }
    int k=1;
    for(int s=i;s<=j;s++)
    {
        str1.data[s]=str2.data[k];
        k++;
    }
    return 1;
}
int main()
{
    String str,substr;
    int n,n2;
    cin>>n>>n2;
    str.length=n;
    substr.length=n2;
    for(int i=1;i<=n;i++)
    {
        cin>>str.data[i];
    }
    for(int i=1;i<=n2;i++)
    {
        cin>>substr.data[i];
    }
    Replace(str,substr,4,5);
    for(int i=1;i<=str.length;i++)
    {
        cout<<str.data[i]<<endl;
    }
}

//7
//5
//a s d f g h j
//e r t y u
*/

/*
//计算子串出现的次数 天勤P103 二 4
int Count(String str,String substr)
{
    int len1=str.length;
    int len2=substr.length;
    int i=0,j=0,k=i;
    int cnt=0;
    while(i<len1)
    {
        while(j<len2)
        {
            if(str.data[i]==substr.data[j])
            {
                i++;
                j++;
            }
            else
                break;
        }
        if(j<len2)
        {
            j=0;
            i=++k;
        }
        else
        {
            cnt++;
            i++;
            j=0;
        }
    }
    return cnt;
}

int main()
{
    String str,substr;
    int n,n2;
    cin>>n>>n2;
    str.length=n;
    substr.length=n2;
    for(int i=0;i<n;i++)
    {
        cin>>str.data[i];
    }
    for(int i=0;i<n2;i++)
    {
        cin>>substr.data[i];
    }
    int d=Count(str,substr);
    cout<<d<<endl;
}
//7 3
//a s d f s d f
//s d f
 
*/


/*
//找出str1中第一个不在str2中出现的字符  天勤P103 二 5
#include <map>
typedef struct stringX
{
    char data;
    struct stringX *next;
}stringX;
char Search(stringX *str1,stringX *str2)
{
    stringX *p=str2;
    map<char,int>mmap;   //用来记录str2中的字符
    for(int i=0;i<101;i++)
        mmap[101]=0;
    while(p!=NULL)
    {
        mmap[p->data]++;
        p=p->next;
    }
    stringX *q=str1;
    while(q!=NULL)
    {
        if(mmap[q->data]==0)
            return q->data;
        q=q->next;
    }
    return '\0';
}
int main()
{
    stringX *str=(stringX*)malloc(sizeof(stringX));
    stringX *substr=(stringX*)malloc(sizeof(stringX));
    str->next=NULL;
    stringX *p=str;
    for(int i=0;i<9;i++)
    {
        stringX *k=(stringX*)malloc(sizeof(stringX));
        cin>>k->data;
        k->next=NULL;
        p->next=k;
        p=k;
    }
    stringX *q=substr;
    for(int i=0;i<5;i++)
    {
        stringX *k=(stringX*)malloc(sizeof(stringX));
        cin>>k->data;
        k->next=NULL;
        q->next=k;
        q=k;
    }
    char s=Search(str,substr);
    cout<<s<<endl;
}

//a s d f g h j k l
//a f s e n
*/

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值