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

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

 #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条回答 默认 最新

      报告相同问题?

      悬赏问题

      • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
      • ¥15 开地址法双散列函数处理碰撞
      • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
      • ¥15 联通光猫掉注册了怎么重新注册上去
      • ¥15 关于unity开发steamvr程序遇到的问题
      • ¥60 求tc downloader的下载方式
      • ¥15 华为 快捷方式 手电筒 接口
      • ¥15 Qt6.5支不支持Android13开发啊
      • ¥20 网络只能跑一半,应该如何设置
      • ¥20 Python调用百度开发者平台人脸识别接口