《C程序设计语言》学习笔记——练习3-3

在写程序之前感觉很多细节没想清楚,写出来之后就发现有些是不需要考虑太多,应该先把主体写出来,把一些细致的地方放到下一步的调试中去。

/* 练习3-3
编写函数expand(s1,s2),将字符串s1中诸如a-z一类的速记符号在字符串s2中扩展成等价
的完整列表abc......xyz。允许处理大小写字母和数字,并可以处理诸如a-b-c与a-z0-9
与-a-z等情况。正确安排好前导与尾随的-。
*/
#include <stdio.h>

void expand(char *s1, char *s2)
{
	int i, j = 0, k;
	for (i = 0; s2[i] != '\0'; i++)
	{
		if (s2[i] == '-' && i > 0 && s2[i+1] != '\0') /*遇到一个位于“中部”的'-'号 */
		{
			/* 若'-'号两边都是字母 */
			if ((s2[i-1] >= 'A' && s2[i-1] <= 'Z' && s2[i+1] >= 'A' && s2[i+1] <= 'Z') ||
				(s2[i-1] >= 'a' && s2[i-1] <= 'z' && s2[i+1] >= 'a' && s2[i+1] <= 'z'))
			{
				/* 扩展并输出(不包括开头第一个字母,因其已经被输出过) */
				for (k = s2[i-1]+1; k <= s2[i+1]; k++)
					s1[j++] = k;
				i++;
			}
			/* 若'-'号两边都是数字 */
			if (s2[i-1] >= '0' && s2[i-1] <= '9' && s2[i+1] >= '0' && s2[i+1] <= '9')
			{
				/* 扩展并输出(不包括开头第一个数字,因其已经被输出过) */
				for (k = s2[i-1]+1; k <= s2[i+1]; k++)
					s1[j++] = k;
				i++;
			}
		}
		else
		{
			s1[j++] = s2[i];
		}
	}
}

main() 
{
	char s2[] = "-a-b-fx-z0-9-";
	char s1[100] = "";
	expand(s1, s2);
	printf("string:\n%s\n", s2);
	printf("expand:\n%s\n", s1);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值