#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 40

typedef char String[MAXSIZE + 1];

bool StrAssign(String T, char* chars)//生成值为chars的串
{
	if (strlen(chars) > MAXSIZE)
		return false;
	else {
		T[0] = strlen(chars);
		for (int i = 1; i <= T[0]; i++)
		{
			T[i] = *(chars + i - 1);
		}
		return true;
	}
}

bool StrCopy(String T, String S)//由串S复制得T
{
	for (int i = 0; i <= S[0]; i++)
	{
		T[i] = S[i];
	}
	return true;
}

bool Is_Empty(String S)//判空
{
	return S[0] == 0;
}

int StrCompare(String S, String T)//字符串比较,S>T 返回值大于0,相等返回0,S<T 返回值小于0
{
	for (int i = 1; i <= S[0] && i <= T[0]; ++i)
		if (S[i] != T[i])
			return S[i] - T[i];
	return S[0] - T[0];
}

int StrLength(String S)//返回串的长度
{
	return S[0];
}

bool ClearString(String S)//清串
{
	S[0] = 0;
	return true;
}

bool Concat(String T, String S1, String S2)//用T返回S1和S2连接成的新串,未截断,返回true,否则返回false
{
	int i;
	if (S1[0] + S2[0] <= MAXSIZE)
	{
		for (i = 1; i <= S1[0]; i++)
			T[i] = S1[i];
		for (i = 1; i <= S2[0]; i++)
			T[S1[0] + i] = S2[i];
		return true;
	}
	else
	{
		for (i = 1; i <= S1[0]; i++)
			T[i] = S1[i];
		for (i = 1; i <= MAXSIZE - S1[0]; i++)
			T[S1[0] + i] = S2[i];
		T[0] = MAXSIZE;
		return false;
	}
	return false;
}

//用Sub返回串S的第pos个字符起长度为len的子串。
bool SubString(String Sub, String S, int pos, int len)
{
	if (pos<1 || pos>S[0] || len<0 || len>S[0] - pos + 1)
		return false;
	for (int i = 1; i <= len; i++)
		Sub[i] = S[pos + i - 1];
	Sub[0] = len;
	return true;
}
//返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数返回值为0
int Index(String S, String T, int pos)//串的匹配
{
	int i = pos;
	int j = i;
	while (i <= S[0] && j <= T[0])
	{
		if (S[i] == T[j])
		{
			++i; 
			++j;
		}
		else {
			i = i - j + 2;
			j = 1;
		}
	}
	if (j > T[0])
		return i - T[0];
	else return 0;
}

int Index2(String S, String T, int pos)//串的匹配
{
	int n, m, i;
	String sub;
	if (pos > 0)
	{
		n = StrLength(S);
		m = StrLength(T);
		i = pos;
		while (i <= n - m + 1)
		{
			SubString(sub, S, i, m);
			if (StrCompare(sub, T) != 0)
				++i;
			else return i;
		}
	}
	return 0;
}
//在串S的第pos个字符之前插入串T。完全插入返回TRUE, 部分插入返回FALSE
bool StrInsert(String S, int pos, String T)
{
	int i;
	if (pos<1 || pos>S[0] + 1)
		return false;
	if (S[0] + T[0] <= MAXSIZE)
	{
		for (i = S[0]; i >= pos; i--)
			S[i + T[0]] = S[i];
		for (i = pos; i < pos + T[0]; i++)
			S[i] = T[i - pos + 1];
		S[0] = S[0] + T[0];
		return true;
	}
	else {
		for (i = MAXSIZE; i <= pos; i--)
			S[i] = S[i - T[0]];
		for (i = pos; i < pos + T[0]; i++)
			S[i] = T[i - pos + 1];
		S[0] = MAXSIZE;
		return false;
	}
}
//从串S中删除第pos个字符起长度为len的子串
bool StrDelete(String S, int pos, int len)
{
	if (pos<1 || pos>S[0] - len + 1 || len < 0)
		return false;
	for (int i = pos + len; i <= S[0]; i++)
		S[i - len] = S[i];
	S[0] -= len;
	return true;
}
//用V替换主串S中出现的所有与T相等的不重叠的子串
bool Replace(String S, String T, String V)
{
	int i = 1;
	if (Is_Empty(T))
		return false;
	do {
		i = Index(S, T, i);
		if (i)
		{
			StrDelete(S, i, StrLength(T));
			StrInsert(S, i, V);
			i += StrLength(V);
		}
	} while (i);
	return true;
}

void Show(String T)//输出字符串
{
	for (int i = 1; i <= T[0]; i++)
		printf("%c", T[i]);
	printf("\n");
}

int main()
{
	String  s1, s2;
	StrAssign(s1, "abcd");
	Show(s1);
	printf("len:%d\n", StrLength(s1));
	StrCopy(s2, s1);
	Show(s2);
	StrAssign(s2, "efghtr");
	printf("compare:%d\n", StrCompare(s1, s2));
	Show(s2);
	StrDelete(s2, 1, 2);
	Show(s2);
	StrInsert(s2, 4, s1);
	Show(s2);
	printf("%d\n",Index2(s2,"abc",1));
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值