上次写链式串的时候就觉得太麻烦了,而且还不一定好用,今天就写顺序的果然方便很多。

写的串是常用的字符串以及一些常用函数。

全部自己原创的,如有不足还请指出。

#include <iostream>
using namespace std;
const int MAXN = (int) 1e6 + 7;

typedef struct Chunk{
	char * str;
} Chunk;
int StrSize(const Chunk &s);	// 函数声明

bool StrInit(Chunk &s)		// 初始化
{
	s.str = NULL;
	s.str = new char[MAXN];
	if(s.str)
		return true;
	else
		return false;
}
bool StrAssign(Chunk &s, char *t)		// 赋值
{
	int i = 0;
	for(i=0; t[i] != '\0'; i++)
	{
		s.str[i] = t[i];
	}
	s.str[i] = '\0';
	return true;
}
bool StrCopy(Chunk &s1, const Chunk &s2)	// 复制另一个串
{
	int i = 0;
	for(i=0; s2.str[i] != '\0'; i++)
	{
		s1.str[i] = s2.str[i];
	}
	s1.str[i] = '\0';
	return true;
}
bool StrCat(Chunk &s1, const Chunk &s2)		// 连接两个串
{
	int j = StrSize(s1);	// j 指向 s1 的末尾 '\0' 处
	for(int i=0; s2.str[i] != '\0'; i++)
	{
		s1.str[j++] = s2.str[i];
	}
	s1.str[j] = '\0';
	return true;
}
int StrCmp(const Chunk &s1, const Chunk &s2)    // 比较两个串
{
	int rec = 0;
	int length = min(StrSize(s1), StrSize(s2));
	for(int i=0; i<=length; i++)	// 这里取等号,到最后一个一定可以分出来谁大谁小或相等
	{
		if(s1.str[i] == s2.str[i])
			continue;
		else if(s1.str[i] > s2.str[i])
		{
			rec = s1.str[i] - s2.str[i];
			break;
		}
		else
		{
			rec = s2.str[i] - s1.str[i];
			break;
		}
	}
	return rec;
}
bool StrDelete(Chunk &s)	// 销毁串
{
	delete s.str;
	s.str = NULL;
	return true;
}
int StrSize(const Chunk &s)		// 求串的长度
{
	int i = 0;
	for(i=0; s.str[i] != '\0'; i++) {}		// 空循环体
	return i;
}
bool StrSwap(Chunk &s1, Chunk &s2)
{
	char ch;
	int length = max(StrSize(s1), StrSize(s2));
	for(int i=0; i<=length; i++)
	{
		ch = s1.str[i];
		s1.str[i] = s2.str[i];
		s2.str[i] = ch;
	}
	return true;
}

int main()
{
	Chunk s;
	StrInit(s);
	StrAssign(s, "chenglongdaxia");
	cout << s.str << endl;

	Chunk t;
	StrInit(t);
	StrAssign(t, "123456");
	StrCopy(s, t);
	cout << s.str << endl;

	StrCat(s, t);
	cout << s.str << endl;

	cout << StrCmp(s, t) << endl;
	StrAssign(s, "chenglongdaxia");
	cout << s.str << endl;
	StrSwap(s, t);
	cout << s.str << " " << t.str << endl;

	StrDelete(s);	// 销毁
	StrDelete(t);


	return 0;
}