《C语言接口与实现》实验——高级字符串(Text_T)

本文详细介绍了使用C语言进行文本操作和格式化的方法,包括文本串与C串之间的转换,文本串的获取、映射、转换及内部实现,通过设置断点深入理解每个函数的作用。

实验程序是用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); // <--- 指针类型}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值