C语言版数据结构串的知识点,数据结构 - C语言版 - 串 所有基本操作

题目:要求输入两个字符串,实现字符串的连接,以及判断这两个串是否相等;

#include

#include

#define MAXSIZE 255

typedef struct String{

int data[MAXSIZE];

int next;

}String;

String * Init_String(String * S)

{

S = (String *) malloc( sizeof(String) );

S->next = 0;

return S;

}

void Create_String(String * S, int e)

{

S->data[S->next] = e;

}

int LengthS_String(String * S)

{

return S->next;

}

int LengthQ_String(String * Q)

{

return Q->next;

}

int LengthAll_String(String * S, String * Q)

{

int s = LengthS_String(S);

int q = LengthQ_String(Q);

return (s + q);

}

int isSame_String(String * S, String * Q)

{

int i;

int count = 0;

if( LengthS_String(S) == LengthQ_String(Q) )

{

for(i=0; i < (Q->next); i++)

{

if(S->data[i] == Q->data[i])

{

count++;

}

else

{

count = 0;

}

}

}

else

{

count = 0;

}

if(count == 0)

{

return 0;

}

else

{

return 1;

}

}

void Cat_String(String * S, String * Q)

{

int countS = S->next - 1;

int len = LengthAll_String(S, Q)-2;

for(S->next=0; S->next < len; S->next++)

{

if(S->next > (countS-1))

{

S->data[S->next] = Q->data[S->next - countS];

}

}

}

void Get_Anyone_String(String * S, String * Q, int i)

{

printf(" 第 %d 个字符: %c\n", i+1, S->data[i]);

}

void Print_String(String * S, int i)

{

printf("%c", S->data[i]);

}

void fun(void)

{

printf("\n");

}

int main(void)

{

int i;

String * S, * Q;

//int len;

S = Init_String(S);

Q = Init_String(Q);

printf("请输入第一个要保存的字符串(S):");

while((S->data[S->next++] = getchar()) != '\n')

{

Create_String(S, S->data[S->next]);

}

printf("请输入第二个要保存的字符串(Q):");

while((Q->data[Q->next++] = getchar()) != '\n')

{

Create_String(Q, Q->data[Q->next]);

}fun();

printf("保存的第一个字符串(S):");

for(i=0; inext-1; i++)

{

Print_String(S, i);

}fun();

printf("保存的第二个字符串(Q):");

for(i=0; inext-1; i++)

{

Print_String(Q, i);

}fun();fun();

if(isSame_String(S,Q))

{

printf("√ Pass: String.S is the same as String.Q");

}

else

{

printf("× Warning: String.S is not the same as String.Q");

}fun();fun();

Cat_String(S, Q); // 连接后,S 数组中,S 的长度就是连接后的长度,因为被调函数从 0 开始循环,最后得到的 S->next 是长度

printf("两个字符串连接后(Strcat):"); // 在这个后面 S->next 就取代了 26 行的 int LengthS_String(String * S);

for(i=0; i < S->next; i++)

{

Print_String(S, i);

}fun();fun();

printf("合并后详细参数:\n");

printf(" 字符串长度为: %d 位\n", S->next);

for(i=0; i < S->next; i++)

{

Get_Anyone_String(S, Q, i);

}

printf("\n");

system("pause");

return 0;

}

/*

----------在VC++ 6.0 显示结果为:----------

请输入第一个要保存的字符串(S):My name is WangJiping.

请输入第二个要保存的字符串(Q):My TeamName is J.Wong.

保存的第一个字符串(S):My name is WangJiping.

保存的第二个字符串(Q):My TeamName is J.Wong.

× Warning: String.S is not the same as String.Q

两个字符串连接后(Strcat):My name is WangJiping. My TeamName is J.Wong.

合并后详细参数:

字符串长度为: 45 位

第 1 个字符: M

第 2 个字符: y

第 3 个字符:

第 4 个字符: n

第 5 个字符: a

第 6 个字符: m

第 7 个字符: e

第 8 个字符:

第 9 个字符: i

第 10 个字符: s

第 11 个字符:

第 12 个字符: W

第 13 个字符: a

第 14 个字符: n

第 15 个字符: g

第 16 个字符: J

第 17 个字符: i

第 18 个字符: p

第 19 个字符: i

第 20 个字符: n

第 21 个字符: g

第 22 个字符: .

第 23 个字符:

第 24 个字符: M

第 25 个字符: y

第 26 个字符:

第 27 个字符: T

第 28 个字符: e

第 29 个字符: a

第 30 个字符: m

第 31 个字符: N

第 32 个字符: a

第 33 个字符: m

第 34 个字符: e

第 35 个字符:

第 36 个字符: i

第 37 个字符: s

第 38 个字符:

第 39 个字符: J

第 40 个字符: .

第 41 个字符: W

第 42 个字符: o

第 43 个字符: n

第 44 个字符: g

第 45 个字符: .

请按任意键继续. . .

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值