练习 1-21 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。
之间 练习 替换 21 数量 单词 空格 保持
2023-09-11 14:22:19 时间
C语言程序设计(第二版) 练习1-21 个人设计
练习 1-21 编写程序entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。
代码块:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void entab(char s[]); //定义函数entab
int main()
{
char string[80]; //定义一个足够大的数组
printf("Please enter string: "); //输入一个字符串
gets(string);
entab(string); //调用entab函数
puts(string); //输出变换后的字符串
system("pause");
return 0;
}
/*entab函数*/
void entab(char s[])
{
int i, j, k, len, space_count; //定义变量,len是字符串长度,space_count是空格计数
len=strlen(s); //测出字符串长度
s[len]='\0'; //给字符串加上终止符
for (i=0, space_count=0; s[i]!='\0'; i++){
if (s[i]==' '){ //当判断出数组中出现空格,开始执行以下条件
space_count++; //空格计数自增加
/*以下7行,是当计数过程中一旦满足空格达到4个的情况,替换为\t,
同时将后面字符向前移动,最后使最外面的for循环的变量i的计数位置转为替换的位置。*/
if (space_count==4){
s[i-3]='\\';
s[i-2]='\\t';
for (j=i-1, k=i+1; s[k]!='\0'; s[j++]=s[k++]);
s[j]='\0';
i-=2;
space_count=0;
}
}
else if (space_count>1){ //当判断数组中不是空格,同时空格计数大于1的情况下开始执行以下条件
if (space_count==4){ //以下7行的原理同前一个
s[i-3]='\\';
s[i-2]='\\t';
for (j=i-1, k=i+1; s[k]!='\0'; s[j++]=s[k++]);
s[j]='\0';
i-=2;
space_count=0;
}
else{ //此条件为空格计数不是4的情况下的处理
for (j=i-space_count+1, k=i; s[k]!='\0'; s[j++]=s[k++]);
s[j]='\0';
i-=3;
space_count=0;
}
}
else //当以上条件都不满足,意味着空格为1,不需要移动,空格计数归零
space_count=0;
}
s[i]='\0';
}
相关文章
- VS中 Winform查看窗体内控件之间的相互关系
- asp.net中用split循环取出【,】之间的每一个值!(源码,实例!)
- 测试无线节能信标与主控器之间的控制功能
- MOS管栅极充电电荷与漏极电压之间的关系
- 可重入锁与不可重入锁之间的区别与性能差异?
- 说说字符串与基本数据之间的转换
- vue组件之间互相传值
- QT-多线程重要概念及与界面之间交互总结(混淆点分析:c#中可以在子线程中创建ui控件,qt中不能在子线程中创建ui控件)
- Spring Boot-JPA、Hibernate、Spring data jpa之间的关系
- python常用的十进制、16进制之间的转换
- SAP WM 通过2-Step Picking创建的TO之间的关联关系
- 《Cocos2d 跨平台游戏开发指南(第2版)》一2.6 在场景之间进行过渡切换
- Fragment之间的通信
- 力扣解法汇总2055-蜡烛之间的盘子
- 两个或者多个图片上下之间有空隙怎么办?
- 主键,唯一索引,唯一约束三者之间的联系与区别