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(其他),可 ...
随机推荐
- 一道C++、MFC上机面试题
题目:写一个基于MFC对话框的程序,界面输入整型a和b,点击计算,开启线程计算a+b,并把结果返回给对话框.(1)不能用结构体和类(2)用到自定义消息(3)鼠标移到[计算]按钮上变为收尸图标.参考界面 ...
- 无法启动mysql服务”1067 进程意外终止”解决办法【简记】
本文章主要是总结了各种导致mysql提示无法启动MYSQL服务”1067 进程意外终止”的一些解决办法,有碰到mysql无法启动的同学可尝试参考. 在win7的服务器里开启MySql服务提示“wind ...
- redis.clients.jedis.exceptions.JedisDataException: ERR invalid DB index
添加redis配置文件, 启动后,调用报错 redis.clients.jedis.exceptions.JedisDataException: ERR invalid DB index ERR i ...
- #017 python实验课第五周
总结写在最前面: 1.语法还是不会...(每周强制留的C语言一百题都没空写PS.团委诶....)都是现查现用(莫凡Python这个网站特别好用知识点一个视频就一分钟B站的播放器没广告,用啥学啥,还配有 ...
- Python基础——1基础
1.基础 输出 print(‘把子肉爱上热干面’,‘哈哈’) # ‘,’输出为空格 输人 name = input(‘提示的内容’) /浮点除法 %.6f //地板除法 整除 % 取余 pyt ...
- 使用time+dd测试硬盘读写速度
命令:time dd if=/dev/zero bs=1M count=2048 of=direct_2G 此命令为在当前目录下新建一个2G的文件 Demo如下: 写速度: time dd if= ...
- CMD 和 Git 中的代理设置
CMD 设置代理 在 cmd 环境下设置代理可能不是很常用,但是某些情况下还是可能会用到,比如公司的电脑只能通过设置代理访问外网,而你需要在 cmd 环境下使用 gem 命令更新文件时. 当然,如果你 ...
- LeetCode练习4 找出这两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- AT24 I2C EEPROM解析及测试
关键词:AT24.I2C.nvmem.EEPROM. 1. AT24C介绍 AT24C是一款采用I2C通信的EEPROM,相关驱动涉及到I2C和nvmem. I2C是读写数据的通道,nvmem将AT2 ...
- IDEA远程调试监控端口
大家知道,线上环境定位问题不是那么简单的,如果有非常完善的日志以及监控系统是不必担心的,但是应对这些并不完善的场景下,IDEA提供了一种远程调试的功能,remote集成了可以远程调试的功能,只需要在你 ...