C++实现字符串字典

本人新手,有什么不足请体谅

dict.h 头文件内容:

#pragma once
#include <iostream>
#include <fstream>
using namespace std;
#ifndef DICT_LSY_H
#define DICT_LSY_H

struct dict  //字典(类似于Python中的)
{
	char *index[256];
	char *value[256];
	int index_num = 0; //字典中值的存储个数
	void set(char *rindex, char *rvalue) //赋值函数
	{
		for (int i = 0; i < index_num; i++) //更改字典中的值
		{
			if (strcmp(rindex, index[i]) == 0)
			{
				value[i] = rvalue;
				return;
			}
		}
		index[index_num] = rindex; //给字典添加新值
		value[index_num] = rvalue;
		index_num++;
	}
	bool including(char *cindex) //判断字典中是否已经存在这个成员
	{
		bool result = false;
		for (int i = 0; i < index_num; i++)
		{
			if (strcmp(cindex, index[i]) == 0)
			{
				result = true;
				break;
			}
		}
		return result;
	}
	char* Value(char *vindex) //获取字典的值
	{
		for (int i = 0; i < index_num; i++)
		{
			if (strcmp(vindex, index[i]) == false)
				return value[i];
		}
		return "[NULL]";
	}
	void savejson(char* filename) //以json格式保存字典
	{
		ofstream json;
		json.open(filename);
		if (!json.fail())
		{
			json << "{" << "\n";
			for (int i = 0; i < (index_num - 1); i++)
				json << "\t\"" << index[i] << "\":\"" << value[i] << "\",\n";
			json << "\t\"" << index[index_num - 1] << "\":\"" << value[index_num - 1] << "\"\n";
			json << "}" << "\n";
			json.close();
		}
	}
	int getindexnum(char *sindex) //获取某值的索引数字
	{
		int i = 0;
		for (i; i < index_num; i++)
		{
			if (index[i] == sindex)
				break;
		}
		return i;
	}
	char* stringify() //转换为json格式字符串
	{
		char jsonstr[32768] = { "{" };
		for (int i = 0; i < index_num; i++)
		{
			strcat(jsonstr, "\"");
			strcat(jsonstr, index[i]);
			strcat(jsonstr, "\":\"");
			strcat(jsonstr, value[i]);
			strcat(jsonstr, "\"");
			if (i != index_num - 1)
				strcat(jsonstr, ",");
		}
		strcat(jsonstr, "}");
		strcpy(jsonstr, replacechar(jsonstr, '\\', "\\\\"));
		return jsonstr;
	}
	void del(char* dindex) //删除字典中某一值
	{
		int j = getindexnum(dindex);
		if (j == index_num)
			return;
		for (int i = j; i < index_num - 1; i++)
		{
			index[i] = index[i + 1];
			value[i] = value[i + 1];
		}
		index[index_num] = "";
		value[index_num] = "";
		index_num--;
	}
	void reset() //重置字典
	{
		for (int i = 0; i < index_num; i++)
		{
			index[i] = "";
			value[i] = "";
		}
		index_num = 0;
	}
	int count(char *cvalue) //计数同一数值在此字典中出现的数
	{
		int c = 0;
		for (int i = 0; i < index_num; i++)
		{
			if (strcmp(value[i], cvalue) == 0)
				c++;
		}
		return c;
	}
};

#endif

涉及到的其他函数:

char* replacechar(char str[32768], char origin_ch, char replaced_str[64]) //将特定字符替换成特定字符串
	{
		char result[32768] = { "" };
		for (int i = 0; true; i++)
		{
			if (str[i] == origin_ch)
				strcat(result, replaced_str);
			else if (str[i] == '\0')
				break;
			else
				strcat(result, chstr(str[i]));
		}
		return result;
	}

本人初中生,正在学习C++,有什么不足请提出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值