我不是忘尘 2017-10-21 05:54 采纳率: 0%
浏览 468

使用单链表实现截取子串,输出原字符串时第一个字符没有输出是怎么回事?求 解答

 #include<stdio.h>
#include<stdlib.h>
typedef struct node
{
    char ch;            //字符域
    struct node *next;  //指针域,存放下一个结点的地址
}*linkstr;
int length; 
linkstr NullString()
{   
    linkstr s;
    s=(linkstr)malloc(sizeof(node));
    if(s!=NULL)
        s->next=NULL;
    return s;
}
linkstr Push()
{   
    linkstr head;
    linkstr p1,p2;
    length=0;
    p1=p2=(linkstr)malloc(sizeof(node));
    printf("输入串:"); 
    scanf("%c",&p1->ch);
    head=NULL;
    while(p1->ch!='\n')
    {
       length++;
       if(length==1) head=p1;
       else p2->next=p1;
       p2=p1;
       p1=(linkstr)malloc(sizeof(node));
       scanf("%c",&p1->ch); 
    }
    p2->next=NULL;
    return(head);
}
int substr(linkstr s,int i,int len,linkstr t)
{
    linkstr p,q,r,u;
    if(i<=0 || i>length|| i+len-1>length )
        return 0;
    int j,k;
    for(j=0,p=s;j<i-1;j++)
        p=p->next;
    for(k=0,r=t,q=t->next;k<len;k++)
    {
        if(q!=NULL)
        {
            q->ch=p->ch;
            r=q;
            q=q->next;
        }
        else
        {
            u=(linkstr)malloc(sizeof(node));
            u->ch=p->ch;
            r->next=u;
            r=u;
        }
        p=p->next;
    }
    while(q!=NULL)
    {   
        p=q->next;
        free(q);
        q=p;
    }
    r->next=NULL;
    return 1;
}
void print(linkstr s)
{
     linkstr p=s->next;
     while(p!=NULL)
     {
        printf("%c",p->ch);
        p=p->next;
     }
     printf("\n");
}
int main()
{
    linkstr s1,s2;
    s2=NullString();
    int m,n;
    s1=Push();
    printf("截取子串:");
    scanf("%d%d",&m,&n);
    substr(s1,m,n,s2);
    print(s1);
    print(s2);
    return 0;
}
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥50 NT4.0系统 STOP:0X0000007B
    • ¥15 想问一下stata17中这段代码哪里有问题呀
    • ¥15 flink cdc无法实时同步mysql数据
    • ¥100 有人会搭建GPT-J-6B框架吗?有偿
    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。