2301_77118124 2023-04-23 20:17 采纳率: 66.7%
浏览 13
已结题

c语言 链式串中子串的替换算法怎么写

若采用单链存储的方式存储串,编写一个算法将串s中的第i个字符到第
j个字符之间的字符(不包括i和j)用t串替换

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-04-23 21:29
    关注
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        char data;
        struct Node* next;
    } Node, *LinkedList;
    
    // 创建一个空链表
    LinkedList createList() {
        LinkedList L = (LinkedList)malloc(sizeof(Node));
        L->next = NULL;
        return L;
    }
    
    // 将一个字符串转换为单链表
    LinkedList stringToList(char s[]) {
        LinkedList L = createList();
        Node* tail = L;
        for (int i = 0; s[i] != '\0'; i++) {
            Node* p = (Node*)malloc(sizeof(Node));
            p->data = s[i];
            p->next = NULL;
            tail->next = p;
            tail = p;
        }
        return L;
    }
    
    // 将链表转换为一个字符串
    void listToString(LinkedList L, char s[]) {
        int i = 0;
        Node* p = L->next;
        while (p != NULL) {
            s[i++] = p->data;
            p = p->next;
        }
        s[i] = '\0';
    }
    
    // 将s串中第i个字符到第j个字符之间的字符(不包括i和j)用t串替换
    void replaceSubString(LinkedList L, int i, int j, char t[]) {
        // 找到第i个节点前面的节点
        Node* p = L;
        for (int k = 1; k < i; k++) {
            if (p == NULL) {
                printf("i太大\n");
                return;
            }
            p = p->next;
        }
        // 找到第j个节点
        Node* q = p;
        for (int k = i; k <= j; k++) {
            if (q == NULL) {
                printf("j太大\n");
                return;
            }
            q = q->next;
        }
        // 将[t]插入到p和q之间
        Node* tList = stringToList(t);
        Node* tail = tList;
        while (tail->next != NULL) {
            tail = tail->next;
        }
        tail->next = q;
        p->next = tList->next;
        free(tList);
    }
    
    int main() {
        char s[] = "Hello, world!";
        LinkedList L = stringToList(s);
    
        printf("原始串:\n");
        printf("%s\n", s);
    
        replaceSubString(L, 7, 12, "GitHub");
        char s2[20];
        listToString(L, s2);
    
        printf("替换后的串:\n");
        printf("%s\n", s2);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月1日
  • 已采纳回答 4月23日
  • 创建了问题 4月23日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀