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

实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!


再次强烈建议在这些接口函数上设上断点,按F11跟进去把源码走一遍!才会获得大师们真正的深刻思想


源程序如下:

#include <stdio.h>
#include <string.h>
#include "include/Str.h"
#include "include/fmt.h"

#pragma comment(lib, "libcii.lib")


void main()
{
	//注意:C语言一定要将这些变量声明放在函数的头部
	char str1[] = {'a', 'b'};
	char str2[] = "0123456789";
	char *strOut = NULL;
	int n = 0;

	printf("%d\n", sizeof(str1));	//输出2
	printf("%d\n", sizeof('a'));	//输出4,单字符常数的类型为int!!验证P172中间

	printf("%c\n", "012345678ABCDEF"[2]);//注意这种用法

	//
	//	取字串
	//	注意:所使用的数字是“位置”,而不是“下标”(索引)!!,位置的定义见P174说明
	//		“位置”转换到“索引”是靠convert(s, i, j);或者idx()完成,参考源码
	//
	strOut = Str_sub(str2, 0, 3);
	printf("Str_sub = %s, %08x\n", strOut, strOut);

	//
	//	复制串
	//
	strOut = Str_dup(str2, 1, 0, 1);
	printf("Str_dup = %s, %08x\n", strOut, strOut);

	//
	//	复制串
	//
	strOut = Str_catv(str2, 0, 1, "ABCDE", 1, 0, NULL);
	printf("Str_catv = %s, %08x\n", strOut, strOut);
	
	//
	//	反转串
	//
	strOut = Str_reverse(str2, 1, 0);
	printf("Str_catv = %s, %08x\n", strOut, strOut);

	//
	//	映射串
	//
	strOut = Str_map("ABC", 1, 0, "ABC", "XYZ");
	printf("Str_map = %s, %08x\n", strOut, strOut);

	//
	//	位置
	//		“位置”-1 就是“索引”
	//
	n = Str_pos("ABC", -1);
	printf("Str_pos = %d\n", n);


	//
	//	长度
	//
	n = Str_len("ABC", 1, 0);
	printf("Str_len = %d\n", n);


	//
	//	串比较
	//
	n = Str_cmp("ABC", 1, 0, "XYZ", 1, 0);
	printf("Str_cmp = %d\n", n);				//"ABC"<"XYZ"


	//
	//	查找字符
	//
	n = Str_chr(str2, 1, 0, '1');
	printf("Str_chr = %d\n", n);

	n = Str_rchr(str2, 1, 0, '1');
	printf("Str_chr = %d\n", n);

	//
	//	查找字符集合
	//		最后一个参数为“任意字符的集合”,对于下面集合,适合‘0’出现的第一个位置为1!!
	//
	n = Str_upto(str2, 1, 0, "TUDX05");
	printf("Str_upto = %d\n", n);


	//
	//	查找字串
	//
	n = Str_find(str2, 1, 0, "89");
	printf("Str_find = %d\n", n);

	//
	//	第一个参数是一个串,第二个参数是“位置+1”,最后一个为一个集合
	//		下面的意思是字符‘4’出现在“427”中的位置+1,是2(不是集合的位置+1)
	//		不明白这个函数为何这样设计??
	//		①第一第二参数为何不合并为一个字符,②返回的是位置+1
	//
	n = Str_any("427", 1, str2);
	printf("Str_any = %d\n", n);


	//
	//下面的意思是,"27"集合(1,0表达了全部集合)在str2中的出现的位置,就是3
	//
	n = Str_many("27", 1, 0, str2);
	printf("Str_many = %d\n", n);

	//
	//下面的意思是,在str2中匹配"0123",返回str2的下一个位置(不是索引),是5
	//
	n = Str_match(str2, 1, 0, "0123");
	printf("Str_match = %d\n", n);

	//
	//	转换函数
	//		下面的意思见《《C语言接口与实现》实验——格式化(Fmt_T)》
	//
	Fmt_register('&', Str_fmt);
	Fmt_print("Str_fmt = %&\n", str2, 0, 1);


}

输出:

2
4
2
Str_sub = 23456789, 00380fe0
Str_dup = 0123456789, 00381018
Str_catv = 0123456789ABCDE, 00381050
Str_catv = 9876543210, 00381098
Str_map = XYZ, 003810d0
Str_pos = 3
Str_len = 3
Str_cmp = -1
Str_chr = 2
Str_chr = 2
Str_upto = 1
Str_find = 9
Str_any = 2
Str_many = 3
Str_match = 5
Str_fmt = 0123456789
Press any key to continue


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值