c++(1)

c++ 分割字符串 学生双向链表 string转char*

最近一直做acm模式发现字符串分割还是很重要的,自己写比较快
在这里插入图片描述

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<sstream>
using namespace std;

int main() {
    string str=",1,2";
   // cin >> str;
    istringstream ss(str);       
    string s2;
    vector<string>result;                 //用流的形式截取
    while (getline(ss, s2, ','))
    {
        result.push_back(s2);
    }
    for (string tem : result) cout << tem << " ";


    result.clear();
   /* char* p = (char*)malloc((str.size()) * sizeof(char));
    str.copy(p, str.size(), 0);
    *(p + str.size()) = '\0';*/
    char* p = (char*)str.c_str();
    char* k = strtok(p, ",");
    while (k)
    {
        string str2=k;
        result.push_back(str2);
        k = strtok(nullptr,",");
    }
    for (string tem : result) cout << tem << " ";
 
}

管理学生数据的一个双向链表

typedef struct {
    string num;
    string name;
    int score[3];
}stu;
class StuDLink {
public:
    struct DLinkNode
    {
        stu data;
        DLinkNode* pre;
        DLinkNode* next;
        DLinkNode(stu data) :data(data), pre(nullptr), next(nullptr) {}
        DLinkNode():pre(nullptr), next(nullptr) {}
    };

    void InitList()
    {
        left = new DLinkNode();
        right = new DLinkNode();
        left->next = right;
        right->pre = left;
    }

    void push_list(stu student)
    {
        DLinkNode* lastnode = right->pre;
        DLinkNode* temp = new DLinkNode(student);
        lastnode->next = temp;
        temp->next = right;
        right->pre = temp;
        temp->pre = lastnode;
    }
    void print()
    {
        DLinkNode* temp = left->next;
        if (temp == right) return;
        while (temp != right)
        {
            cout << temp->data.num << " " << temp->data.name << " ";
            for (int i = 0; i < 3; i++)
            {
                cout << temp->data.score[i] << " ";
            }
            cout << endl;
            temp = temp->next;
        }
    }
    void deleteStu(string num)
    {
        DLinkNode* temp = left->next;
        if (temp == right) return;
        while (temp != right)
        {
            if (num == temp->data.num)
            {
                DLinkNode* temp2 = temp;
                temp->pre->next = temp->next;
                temp->next->pre = temp2->pre;
            }
            temp = temp->next;
        }
    }
    DLinkNode* left;
    DLinkNode* right;
};
int main() {

    StuDLink a;
    a.InitList();
    stu a1;
    a1.name = "111";
    a1.num = "12312313";
    a1.score[0] = 20;
    a1.score[1] = 30;
    a1.score[2] = 60;
    stu a2;
    a2.name = "222";
    a2.num = "12312313";
    a2.score[0] = 50;
    a2.score[1] = 30;
    a2.score[2] = 60;
    a.push_list(a1);
    a.push_list(a2);
    a.deleteStu("12312313");
    a.print();

}

今日小记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值