题目:要求输入两个字符串,实现字符串的连接,以及判断这两个串是否相等;
#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 个字符: .
请按任意键继续. . .
*/