版权声明:转载标明出处即可 https://blog.csdn.net/hpu2022/article/details/84346368
上次写链式串的时候就觉得太麻烦了,而且还不一定好用,今天就写顺序的果然方便很多。
写的串是常用的字符串以及一些常用函数。
全部自己原创的,如有不足还请指出。
#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;
}