数据结构 - C语言版 - 串 所有基本操作
2013-11-19 20:27
721 查看
题目:要求输入两个字符串,实现字符串的连接,以及判断这两个串是否相等;
#include <stdio.h> #include <stdlib.h> #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; i<S->next-1; i++) { Print_String(S, i); }fun(); printf("保存的第二个字符串(Q):"); for(i=0; i<Q->next-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 个字符: . 请按任意键继续. . . */
相关文章推荐
- 数据结构 - C语言版 - 线性表 所有基本操作
- 数据结构 - C语言版 - 单链表 所有基本操作
- 数据结构 - C语言版 - 双向链表 所有基本操作
- 数据结构 - C语言版 - 顺序栈 所有基本操作
- 数据结构 - C语言版 - 链栈 所有基本操作
- C语言版数据结构中顺序表的基本操作定义和初始化
- 严蔚敏数据结构单链表的所有基本操作
- 栈的基本操作(附带一个数据结构、C语言版)
- 数据结构 顺序表的基本操作 (C++ 版本)
- 数据结构复习之单链表:基本操作及逆序打印、逆转、合并等
- 数据结构-共享栈的基本操作实现
- 第15周SHH数据结构-【项目3 - B-树的基本操作】
- 数据结构-链表的基本操作
- 数据结构-栈的基本操作
- 从c小白开始自学数据结构——第三天【链表的基本操作】
- 数据结构学习笔记(二) 链表之带表头结点的单循环链表基本操作
- 栈的简单基本操作(数据结构)
- 数据结构之队列定义及基本操作实现
- C# j基本操作-拷贝文件夹的所有内容到另一个文件夹内: 复制代码 1 public static void CopyDir(string srcPath, string实现文件夹的复制以及删除
- 数据结构--顺序栈的基本操作