顺序表

 

C语言实验——删除指定字符

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

输入

第一行是一个字符串,不超过100个字符;
第二行是一个字符。

输出

删除指定字符后的字符串。

示例输入

sdf$$$sdf$$
$

示例输出

sdfsdf

 

 

 

///规范格式 注释 和 “&”

 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#define zone 100
using namespace std;

typedef char elemtype;

typedef struct
{
    elemtype *arr;
    int len;
    int listsize;
} List;

void Delete(List &l)///删除重复元素
{
    int i,j,flo=1;

    for (i=2; i<=l.len; i++)
    {
        for (j=1; j<=flo; j++)
        {
            if (l.arr[i] == l.arr[j])
            {
                break;
            }
        }
        if (j==flo+1)
        {
            flo++;
            l.arr[flo]=l.arr[i];
        }
    }
    l.len=flo;
}

void Creat(List &l)
{
    l.arr=new elemtype[zone];
    if (!l.arr) exit(-1);
    l.len=0;
    l.listsize=zone;
}

void Insert(List &l,int n)///插入 n 个数据
{
    int i;
    for (i=1; i<=n; i++)
    {
        scanf("%d",&l.arr[i]);
    }
    l.len=n;
}

void print(List &l)///输出表(注意变化)
{
    int i;
    ///cout<<l.arr<<endl;
    ///cout<<l.len<<endl;
    for (i=0; i<l.len; i++)
    {
        cout<<l.arr[i];
        if (i!=l.len-1) cout<<" ";
    }
    cout<<endl;
}

void exchange(List &l,int m)/// 逆序; 三次逆序
{
    int i,t,x=0;
    for(i=1; i<=l.len/2; i++)
    {
        t=l.arr[i];
        l.arr[i]=l.arr[l.len+1-i];
        l.arr[l.len+1-i]=t;
    }
    for (i=1; i<=(l.len-m)/2; i++)
    {
        t=l.arr[i];
        l.arr[i]=l.arr[l.len-m+1-i];
        l.arr[l.len-m+1-i]=t;
    }
    for (i=l.len-m+1; x<=(m-1)/2; i++)
    {
        t=l.arr[i];
        l.arr[i]=l.arr[2*l.len-m+1-i];
        l.arr[2*l.len-m+1-i]=t;
        x++;
    }
}

int Find(List &l,int key,int i,int j)///二分查找
{
    int  mid;
    while (i<=j)
    {
        mid=(i+j)/2;
        if (l.arr[mid] == key)
        {
            return mid;
        }
        if (l.arr[mid] > key)
        {
            j=mid-1;
        }
        else
        {
            i=mid+1;
        }
    }
    return -1;
}
void inall(List &l,List &l2,List &l3)///将l,l2归并到l3
{
    int i;
    int len1=l.len,len2=l2.len;
    int  L1=1,L2=1,L3=1;
    while(len1!=0&&len2!=0)
    {
        if (l.arr[L1] <= l2.arr[L2])
        {
            l3.arr[L3]=l.arr[L1];
            L3++;
            L1++;
            len1--;
        }
        else if (l.arr[L1] > l2.arr[L2])
        {
            l3.arr[L3]=l2.arr[L2];
            L3++;
            L2++;
            len2--;
        }
    }
    if (len1!=0)
    {
        for (i=L1; i<=l.len; i++)
        {
            l3.arr[L3]=l.arr[i];
            L3++;
        }
    }
    else if (len2!=0)
    {
        for (i=L2; i<=l2.len; i++)
        {
            l3.arr[L3]=l2.arr[i];
            L3++;
        }
    }
    l3.len=l.len+l2.len;
}
void Delet(List &l,char *x)
{
    int i,j;
    for (i=0; i<l.len; i++)
    {
        if (l.arr[i] == x[0])
        {
            for (j=i; j<l.len; j++)
            {
                l.arr[j]=l.arr[j+1];
            }
            l.len--;
            i--;///回到第一个元素判断
        }
    }
}
int main()
{

    char s[3];
    List l;
    Creat(l);
    scanf("%s",l.arr);
    l.len=strlen(l.arr);
    scanf("%s",s);
    Delet(l,s);

    print(l);

    return 0;
}

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值