自己编写的工具函数头文件

鉴于在最近几次程序作业中所编写的函数在后面会随时用到,所以编写了tool.h以便之后使用(随写随更新)


//
// Created by 杜逸凡 on 2019-12-01.
// 工具头文件,其中包括多种个人常用函数
//

#ifndef _TOOL_H
#define _TOOL_H

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

/*
 * 类型转换函数
 */

//string型转int型
int str2int(string str){
    int data_int=0;
    if(str[0]=='-'){
        for(int i=1;i<str.length();i++)
        {
            data_int*=10;
            data_int+=(int(str[i])-48);//string 转 int
        }
        return -data_int;
    }else{
        for(int i=0;i<str.length();i++)
        {
            data_int*=10;
            data_int+=(int(str[i])-48);//string 转 int
        }
    }
    return data_int;
}

//string型转long long型
long long str2ll(string str){
    int data_ll=0;
    if(str[0]=='-'){
        for(int i=1;i<str.length();i++)
        {
            data_ll*=10;
            data_ll+=(long long(str[i])-48);//string 转 int
        }
        return -data_ll;
    }else{
        for(int i=0;i<str.length();i++)
        {
            data_ll*=10;
            data_ll+=(int(str[i])-48);//string 转 int
        }
    }
    return data_ll;
}

//int型转string型
inline string int2str(int num){
    stringstream ss;
    ss<<num;
    return ss.str();
}

//long long型转string型
inline string ll2str(long long num){
    stringstream ss;
    ss<<num;
    return ss.str();
}

/*
 * 树、图创建函数
 */

//创建二叉树(结构体)
typedef struct Binary_tree{
    struct Binary_tree * left;
    int data;
    struct Binary_tree * right;
}bt,*pbt;

//创建二叉树
pbt create_Binary_tree(){
    pbt p;
    string data;
    cout<<"please inupt data(if you want to stop,input *):";
    cin>>data;
    if(data[0]=='*'){
        p=NULL;
        return p;
    }
    else{
        p=(pbt)malloc(sizeof(bt));
        p->data=str2int(data);
        p->left=create_Binary_tree();
        p->right=create_Binary_tree();
    }
    return p;
}

//创建图(邻接表)(结构体)
typedef struct graph_link{
    int code;
    graph_link *next;
}gl,*pgl;

//创建图(邻接表),输入起点-终点组合,存入邻接表
vector<pgl> create_Adjacent(int point){
    vector<pgl>adjacent;
    for(int i=0;i<point;i++)
    {
        pgl p=(pgl)malloc(sizeof(gl));
        p->code=i+1;
        p->next=NULL;
        adjacent.push_back(p);
    }
    string start,end;
    while(1){
        cout<<"please input start(if you want to stop,input *):";
        cin>>start;
        if(start[0]=='*')
            break;
        cout<<"please input end:";
        cin>>end;
        for(int i=0;i<point;i++)
            if(adjacent[i]->code==str2int(start)){
                pgl node=(pgl)malloc(sizeof(gl));
                node->next=NULL;
                node->code=str2int(end);
                pgl p=adjacent[i];
                while(p->next!=NULL)
                    p=p->next;
                p->next=node;
            }
    }
    return adjacent;
}

//字符串暴力匹配算法(Brute-force matching)
void BFM(string target,string find){
    unsigned long length_t,length_f;
    int judge,judge_f;
    length_t=target.size();
    length_f=find.size();
    for(int i=0;i<length_t;i++)
    {
        judge=i;
        judge_f=0;
        for(int j=0;j<length_f;j++)
        {
            if(find[j]!=target[i+judge_f])
                break;
            if(j==length_f-1)
                cout<<judge<<' ';
            judge_f++;
        }
    }
}

#endif //_TOOL_H

 

更新日志:

2019-12-03    增加了类型转换函数对负数的支持

2019-12-21     修改了错误的函数名称以及其描述

点赞

发表评论