中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 07:19
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » [原创]BAISIC和C的NOBLANK实现
可打印版本  1,257 / 1
第1楼 lemonhall 发表于 2003-08-02 00:00
高级用户 发帖 183 积分 639
[原创]BAISIC和C的NOBLANK实现
*****************************************
*以下两个例程完全由lemonhall编写并运行
*通过,未经过严格测试.
*请不要未经同意,任意转贴
[email protected] QQ:313813
***************************************

Qbasic1.0/Quick Baick 4.5下运行通过
将输入中的双空格消去成为单空格的例程

===============================================
'建立一个过大的缓冲区
DIM c$(999)

'计数器初式化
n = 1
CLS

'用一个循环仿真相应的getchar函数
DO UNTIL c$(n - 1) = CHR$(13)
10 c$(n) = INKEY$: IF c$(n) = "" THEN 10
PRINT c$(n);
n = n + 1
LOOP

'使用了一个同名计数器,是一个很不好的习惯
n = 1

'相应的define NOBLANK 'a'
lc$ = "a"


'完全按C语言的逻辑运算核心"抄"出来的循环
'其中s开头代表一个状态,state
'用IF结构是为了完全显示地声明出二进制状态
DO UNTIL c$(n) = CHR$(13)
IF c$(n) " " THEN
sc = 1
ELSE
sc = 0
END IF

IF lc$ " " THEN
slc = 1
ELSE
slc = 0
END IF

'进行一个BAISC的逻辑运算,是判断的核心
ss = sc OR slc
IF ss 0 THEN PRINT c$(n);
lc$ = c$(n)
n = n + 1
LOOP

=========================================
= 相应的C语言实现(改造Berkeley C) =
=========================================


#include
/*开始有些难理解的语句*/
#define NOBLANK 'a'
main()
/*replace string of blanks with a single blank */
/*这无需翻译了吧*/

{
int c,lastc;
lastc=NOBLANK;

while((c=getchar())!=EOF) {
if (c!=' '||lastc!=' '
putchar(c);
lastc=c;
}
}
第2楼 LanE 发表于 2003-08-02 00:00
银牌会员 发帖 648 积分 1,835
支持原创!!!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023