大佬帮看看c语言链表的一个问题,这里的输入该怎么处理啊

【1】 (程序设计)链表插入与删除。读入多行命令,每行只有一个命令,根据命令操作链表,输出最后的链表。
append,100 表示在链表的最后增加一个数据为100的节点
insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
end 表示命令输入结束

输入例子:
append,100
append,101
append,102
append,103
insert,2,1000
delete,1,1000
insert,2,1001
append,1002
end

输出结果:
100 1000 1001 102 103 1002

望采纳

#include <iostream>
#include <string>
using namespace std;

//定义单链表节点
using LNode = struct LNode
{
    int data;
    LNode* next;
};
using ElemType = int;
using LinkList = LNode*;

//初始化单链表
//带头结点的单链表
bool InitListHead(LinkList& L)
{
    L = new LNode;
    if (L == nullptr)
    {
        return false;
    }
    L->next = nullptr;
    return true;
}

//按位序插入  在表L中的第i几个位置插入指定元素e
bool ListInsert(LinkList& L, int i, ElemType e)
{
    if (i < 1)
    {
        return false;
    }
    LNode* p = L;
    int j = 0;
    while (p != nullptr && j < i - 1)  //循环找到i-1节点
    {
        p = p->next;
        j++;
    }
    if (p == nullptr)
    {
        return false;
    }
    LNode* s = new LNode;
    s->data = e;
    s->next = p->next;
    p->next = s;
    return true;
}

//删除(带头结点)
bool ListDelete(LinkList& L, int i, ElemType& e)
{
    if (i < 1)
    {
        return false;
    }
    LNode* p = L;
    int j = 0;
    while (p != nullptr && j < i - 1)
    {
        p = p->next;
        j++;
    }
    if (p == nullptr || p->next == nullptr)
    {
        return false;
    }
    LNode* q = p->next;
    p->next = q->next;
    e = q->data;
    delete q;
    return true;
}


//尾插法
LinkList List_TailInert(LinkList& L, int e)
{
    if (L == nullptr)
    {
        L = new LNode;           //建立头结点
        L->next = nullptr;
        L->data = e;
    }
    else
    {
        LNode* r = L;           //r为表尾指针
        while (r->next != nullptr)
            r = r->next;
        LNode* s = new LNode;   // 插入节点
        if (s == nullptr)
        {
            return s;
        }
        s->data = e;
        s->next = r->next;
        r->next = s;
    }
    return L;
}

/**
 * @brief 打印
 */
void print_list(LinkList& L)
{
    LinkList temp = L;
    while (temp != nullptr)
    {
        std::cout << temp->data << " ";
        temp = temp->next;
    }
    std::cout << std::endl;
}


//清空链表
void clearList(LinkList& L)
{
    LinkList p = L;
    while (L)
    {
        L = L->next;//先移动L
        delete p;//再释放p
        p = L;//再移动p
    }
    cout << "链表清空完毕!\n";

}


int main()
{
    std::string ch;                // 输入命令
    int y = 0;                     // 输入结束符

    LinkList L = nullptr;          // 链表
    do
    {
        std::cout << "************************************" << std::endl;
        std::cout << "\n\t 输入指令 ";
        std::cout << "\n 1. append,100 表示在链表的最后增加一个数据为100的节点";
        std::cout << "\n 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点";
        std::cout << "\n 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据";
        std::cout << "\n 4. end 表示命令输入结束 \n";
        std::cout << "************************************" << std::endl;
        std::cout << "\n输入您的选择: ";
        std::getline(std::cin, ch);

        int nRet = -1;
        nRet = ch.find("append");
        if (nRet != -1)
        {
            std::string temp = ch.substr(nRet + 7, ch.size() - 1);
            int nData = std::atoi(temp.c_str());  // 截取插入数据
            L = List_TailInert(L, nData);
            continue;
        }

        nRet = ch.find("insert");
        if (nRet != -1)
        {
            // insert,10,1234
            int nSerach = ch.find(",", nRet);                               // 确定第1个 "," 位置
            int nSerach001 = ch.find(",", nSerach + 1);                     // 确定第2个 "," 位置
            std::string temp = ch.substr(nSerach + 1, nSerach001 - nSerach - 1);    // 位置          
            std::string temp1 = ch.substr(nSerach001 + 1, ch.size() - 1);            // 截取插入数据

            int nNum = std::atoi(temp.c_str());       // 截取插入数据
            int nData = std::atoi(temp1.c_str());     // 位置
            bool isInsertFlag = ListInsert(L, nNum, nData);
            if (!isInsertFlag)
            {
                std::cout << "insert error" << std::endl;
            }
            else
            {
                std::cout << "insert success! ch =[" << ch << "]" << std::endl;
            }
            continue;
        }

        nRet = ch.find("delete");
        if (nRet != -1)
        {            
            // delete,5,1000
            int nSerach = ch.find(",", nRet);                               // 确定第1个 "," 位置
            int nSerach001 = ch.find(",", nSerach + 1);                     // 确定第2个 "," 位置
            std::string temp = ch.substr(nSerach + 1, nSerach001 - nSerach - 1);    // 位置          
            std::string temp1 = ch.substr(nSerach001 + 1, ch.size() - 1);            // 截取插入数据

            int nNum = std::atoi(temp.c_str());       // 截取插入数据
            int nData = std::atoi(temp1.c_str());     // 位置
            bool isInsertFlag = ListDelete(L, nNum, nData);
            if (!isInsertFlag)
            {
                std::cout << "delete error" << std::endl;
            }
            else
            {
                std::cout << "delete success! ch =[" << ch << "]" << std::endl;
            }

            continue;
        }

        nRet = ch.find("end");
        if (nRet != -1)
        {
            print_list(L);
            clearList(L);
            y = 0;    
            break;
        }

        std::cout << "\n输入有效选项.\n";

    } while (y != 1);
    return 0;
}

打印

************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: append,100
************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: append,200
************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: append,300
************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: insert,1,400
insert success! ch =[insert,1,400]
************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: delete,1,400
delete success! ch =[delete,1,400]
************************************

         输入指令
 1. append,100 表示在链表的最后增加一个数据为100的节点
 2. insert,10,1234 表示在链表的第10个位置(最前面的位置为0)插入数据为1234的节点
 3. delete,5,1000 表示删除第5个节点,后面可能还有一个多余的数据,程序要跳过此数据
 4. end 表示命令输入结束
************************************

输入您的选择: end
100 200 300