实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!
再次强烈建议在这些函数上设上断点,按F11跟进去把源码走一遍,才有真正的学习效果!
源程序如下:
#include <stdio.h>
#include <stdlib.h> //rand函数使用
#include <string.h>
#include "include/Text.h"
#include "include/Fmt.h"
#pragma comment(lib, "libcii.lib")
void Print(Text_T t)
{
char *str = NULL;
str = Text_get(str, 0, t);
printf("str = %s\n", str);
}
void main()
{
//注意:C语言一定要将这些变量声明放在函数的头部
Text_T t1;
Text_T t2;
Text_T t3;
char *str = NULL;
char *str1 = NULL;
//c串 -> Text串
// Text_put 与 Text_box不同,分配新空间
t1 = Text_put("Hello");
//Text串 -> c串,注意是返回值,不是第一个参数的值,若要使用第一个参数带回分配的地址
// 必须使用二级指针,但是该函数不支持
//
// 另注:这些函数中的参数Text_T,都是值传递,不是地址传递,注意和Stack_T头文件比较,
// 不是 typedef T *T定义方式。
// 因为Text_T数据结构不大,这种传递开销也不大
str = Text_get(str, 0, t1);
printf("str = %s\n", str);
//Text_box 不分配空间
t2 = Text_box("Good", strlen("Good"));
Print(t2);
//取整个t1 到 t3, 并不复制,两个变量共享
// 注意是“位置”,不是“索引下标”
//
t3 = Text_sub(t1, 1, 0);
Print(t3);
//
printf("%d\n", Text_pos(t3, 3));
//
//下面函数不再测试
// Text_cat(), Text_dup(), Text_reverse()
//
//映射函数
// 是将t1里的每一个字符,安装from -> to的原则转换
// 下面就是【小写】变【大写】
//
t3 = Text_map(t1, &Text_lcase, &Text_ucase);
Print(t3);
//
// 转换函数
// 下面的意思见《《C语言接口与实现》实验——格式化(Fmt_T)》
// 注意:参考Text_fmt的内部实现,接受的是一个指针类型
//
Fmt_register('S', Text_fmt);
Fmt_print("Text_fmt = %S\n", &t1); // <--- 指针类型
//下面改变了“转换限定符”,输出结果一样
Fmt_register(', Text_fmt); Fmt_print("Text_fmt = %$\n", &t1); // <--- 指针类型}
本文详细介绍了使用C语言进行文本操作和格式化的方法,包括文本串与C串之间的转换,文本串的获取、映射、转换及内部实现,通过设置断点深入理解每个函数的作用。
1835

被折叠的 条评论
为什么被折叠?



