#include"iostream"
using namespace std;
//=================串==============================
/*两个串是否相等,必须是它们串的长度以及它们各个对应位置的字符都相等时,才算是相等.
串的顺序存储结构的缺点是字符串的截断,截断就是超过预定义长度的串值被舍去.*/
//=========串的顺序存储===========
/*一般T[0]存放串的大小*/
const int MAXSIZE = 40;
struct StringType
{
char Str[MAXSIZE];
int length;
struct StringType(int x) :length(0){};
};
/*输出字符串T*/
bool StringVisit(const StringType *T)
{
if (T->length==0)
{
cout << "空串!" << endl;
return false;
}
else
{
for (int i = 0; i <T->length; i++)
cout << T->Str[i];
cout << endl;
return true;
}
}
/*生成一个其值为chars的串T*/
bool StrCreate(StringType *T, char *chars)
{
if (strlen(chars) > MAXSIZE)
return false;
else
{
T->length = strlen(chars);
for (int i = 0; i <T->length; i++)
T->Str[i] = chars[i];
return true;
}
}
/* 返回串的元素个数 */
int StrLength(StringType *T)
{
return T->length;
}
/*串比较:
初始条件: 串S和T存在
操作结果: 若S>T,则返回值>0;若S=T,则返回值=0;若S < T,则返回值< 0 */
int StrComp(const StringType *T, const StringType *S)
{
for (int i = 0; i < T->length && i < S->length; i++)
{
if (S->Str[i]!=T->length)
return S->Str[i] - T->Str[i];
}
return S->length - T->length;
}
/* 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE */
bool Contact(StringType *T, StringType *S1, StringType *S2)
{
if (S1->length + S2->length <= MAXSIZE)
{
for (int i = 0; i < S1->length; i++)
T->Str[i] = S1->Str[i];
for (int j = 0; j < S2->length; j++)
T->Str[j] = S2->Str[j];
T->length = S1->length + S2->length;
return true;
}
else
{
for (int i = 0; i < S1->length; i++)
T->Str[i] = S1->Str[i];
for (int j = 0; j < MAXSIZE-S1->length; j++)
T->Str[j] = S2->Str[j];
T->length = MAXSIZE;
return false;
}
}
/* 用Sub返回串S的第pos个字符起长度为len的子串。 */
bool SubString(StringType *T, StringType *Sub, int pos, int len)
{
if (T->length < 0 || pos < 0 || len<0 || pos>T->length || len>T->length - pos)
return false;
else
{
Sub->length = len;
for (int i = 0; i < len; i++)
Sub->Str[i] = T->Str[pos + i];
return true;
}
}
//kmp模式匹配算法
int main()
{
char *cc = "asdfchjksj";
StringType *T = new StringType(0);
StrCreate(T, cc);
return 0;
}
更新中.........