NOI-OJ 1.7 ID:21 单词替换
整体思路
本题如果使用scanf每次读入一个单词、比对替换后再进行输出的话就十分简单,使用这种方法必须要用数组把读入的所有单词存起来,读入的count个单词的前n-2个是原文,第n-1个是查找的单词,第n个是替换值。
如果要求设计一个函数replace(原文,被替换单词,替换值),这就稍有些难度,但这样的设计训练是有意义的,因为replace函数是在各种程序设计语言中常用的字符串处理函数,理解其工作原理十分重要。基本思路:
- 从0开始依次处理原文每一个字符
- 从该位置开始使用strncmp和被替换单词进行对比,并且对该部分的有效性进行判断,判断方法见代码。对比成功且有效则输出替换值,修改位置坐标为当前位置+被替换单词长度后重复第2步。
- 第2步对比或有效性判断不成功,则直接输出该字符,当前位置+1,回到第2步
本题提供两个例程用于参考:
例程1:设计replace函数
#include<iostream>
#include<cstring>
using namespace std;
void replace(char S[], char A[], char B[]); //replace函数声明
int main(){ //主函数十分清晰
char s[101], a[101], b[101];
gets(s);
gets(a);
gets(b);
replace(s, a, b);
return 0;
}
void replace(char S[], char A[], char B[]){ //注意形参的写法
int lenS=strlen(S);
int lenA=strlen(A);
int lenB=strlen(B);
int i=0;
while(i<lenS){ //有效性原则——头:下标为0或前一个字符为空格,尾:原文[下标+lenA]为结束符或空格
if(strncmp(S+i, A, lenA)==0 && (i==0 || S[i-1]==' ') && (S[i+lenA]=='\0' || S[i+lenA]==' ')){
printf("%s", B);
i+=lenA;
}else{
printf("%c", S[i]);
i++;
}
}
}
例程2:数组存储
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char t[200][200]; //二维数组,可容纳200行长度为199的字符串
int n=0;
while(scanf("%s", t[++n])!=EOF) ; //下标从1开始便于引用,注意这里二维数组的使用
//t[n]代表第n行字符串的首地址,故前面不用加“&”
n--; //最后一次读取是失败的,所以n要减一
for(int i=1; i<=n-2; i++){
if(strcmp(t[i], t[n-1])==0)
printf((i==1)?"%s":" %s", t[n]); //用三元运算符控制输出格式,第一次输出单词
else //以后每次输出空格+单词
printf((i==1)?"%s":" %s", t[i]);
}
return 0;
}
NOI-OJ 1.7 ID:21 单词替换的更多相关文章
- 【九度OJ】题目1111:单词替换
题目1111:单词替换 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单 ...
- AC日记——单词替换 1.7 21
21:单词替换 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区 ...
- 九度OJ 1111:单词替换 (查找)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4473 解决:1268 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔 ...
- 九度oj 题目1111:单词替换
题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符 ...
- spring mvc 用freemarker实现/user/edit?id=${id}=${type} 的替换
java 中实现/user/edit?id=${id}=${type} 的替换; 引入包: freemark.jar ,以及 类代码如下: public class FreeMarkerTextTe ...
- LUA实现单词替换功能
背景描述 编程或者文档处理过程, 经常遇到需要将一个单词修改为另外一个单词的情况, 例如 命名为 shall 修改 为 should. 使用工具实现, 则比较方便,不容易出错, 解放双手. 需求规格 ...
- OpenJudge计算概论-单词替换
/*====================================================================== 单词替换 总时间限制: 1000ms 内存限制: 65 ...
- 九度OJ1111题-单词替换
题目1111:单词替换 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6752 解决:1891 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组 ...
- Leetcode 648.单词替换
单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other(其他),可 ...
随机推荐
- ios兼容 iphoneX ios10 ios11
假设你有一个固定位置的标题栏,你的iOS10的CSS可能是这样写的: header { position: fixed; top:; left:; right:; height: 44px; padd ...
- SQL LCASE() 函数
LCASE() 函数 LCASE 函数把字段的值转换为小写. SQL LCASE() 语法 SELECT LCASE(column_name) FROM table_name SQL LCASE() ...
- opn要求
1.在公司 ♦可以通过阿里云的公网ip访问pg 2.不在公司 ♦需要连接VPN才可访问阿里云的公网ip的应用(假定pg),但是特别的应用不在公司也可直接访问(假定gitlab) 思路提示:vpn黑白名 ...
- redhat 6.5 安装和配置zabbix客户端
一.安装zabbix-agent端 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6. ...
- spring boot 2.0 WebMvcConfigurerAdapter过时解决方法
第一种: @Configuration public class WebAppConfig implements WebMvcConfigurer{ @Bean public HandlerInter ...
- C# — 创建Windows服务进阶版
1.新建一个Windows服务项目:FaceService 2.将service1.cs重命名为FaceService.cs,然后在主界面右击鼠标,选择添加安装程序 3.鼠标选择serviceInst ...
- SQLserver查询库中包含某个字段的表
select [name] from [TPMS_PRD].[dbo].sysobjects where id in(select id from [TPMS_PRD].[dbo].syscolumn ...
- First ServiceStack Service
博客1:ServiceStack Web Service 创建与调用简单示列 博客2:Hbuilder+vs2017 web api开发app 官方文档:servicestack docs 1.手动下 ...
- 06-JavaScript的流控制语句
06-JavaScript的流控制语句 JavaScript的流控制语句主要分为三大类: 顺序控制:因为JS是一门解释性语言,所以从上至下按顺序依次执行 分支控制:主要分为if条件语句和swith开关 ...
- 科大讯飞语音合成api
import base64import jsonimport timeimport hashlibimport requests # API请求地址.API KEY.APP ID等参数,提前填好备用a ...