整体思路

  • 本题如果使用scanf每次读入一个单词、比对替换后再进行输出的话就十分简单,使用这种方法必须要用数组把读入的所有单词存起来,读入的count个单词的前n-2个是原文,第n-1个是查找的单词,第n个是替换值。

  • 如果要求设计一个函数replace(原文,被替换单词,替换值),这就稍有些难度,但这样的设计训练是有意义的,因为replace函数是在各种程序设计语言中常用的字符串处理函数,理解其工作原理十分重要。基本思路:

    1. 从0开始依次处理原文每一个字符
    2. 从该位置开始使用strncmp和被替换单词进行对比,并且对该部分的有效性进行判断,判断方法见代码。对比成功且有效则输出替换值,修改位置坐标为当前位置+被替换单词长度后重复第2步。
    3. 第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 单词替换的更多相关文章

  1. 【九度OJ】题目1111:单词替换

    题目1111:单词替换 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单 ...

  2. AC日记——单词替换 1.7 21

    21:单词替换 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区 ...

  3. 九度OJ 1111:单词替换 (查找)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4473 解决:1268 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔 ...

  4. 九度oj 题目1111:单词替换

    题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符 ...

  5. spring mvc 用freemarker实现/user/edit?id=${id}=${type} 的替换

    java 中实现/user/edit?id=${id}=${type} 的替换; 引入包: freemark.jar  ,以及 类代码如下: public class FreeMarkerTextTe ...

  6. LUA实现单词替换功能

    背景描述 编程或者文档处理过程, 经常遇到需要将一个单词修改为另外一个单词的情况, 例如 命名为 shall 修改 为 should. 使用工具实现, 则比较方便,不容易出错, 解放双手. 需求规格 ...

  7. OpenJudge计算概论-单词替换

    /*====================================================================== 单词替换 总时间限制: 1000ms 内存限制: 65 ...

  8. 九度OJ1111题-单词替换

    题目1111:单词替换 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6752 解决:1891 题目描述: 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组 ...

  9. Leetcode 648.单词替换

    单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other(其他),可 ...

随机推荐

  1. jenkins自动化工具使用教程(转)

    自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 DevOps自动化运维流行 集群化,高可 ...

  2. 爬虫之Requests&beautifulsoup

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  3. HP ML150 G6 服务器硬件介绍

    前面板和背面板组件介绍: 1 介质托架                           12 系统运行状况 LED 指示灯 2 USB 2.0 端口 (2)               13 AC ...

  4. Filebeat使用内置的mysql模块收集日志存储到ES集群并使用kibana存储

    Filebeat内置了不少的模块,可以直接使用他们对日志进行收集,支持的模块如下: [root@ELK-chaofeng07 logstash]# filebeat modules list Enab ...

  5. 用人类社会工程学对C语言中的一些基本概念的剖析与理解

    最近在学C语言程序设计时总是遇到一些概念理解上的不清晰与混乱的地方,在一次偶然间想到了以前看过的一部电影<我是谁,没有一个系统是安全的>,里面的主角用社会工程学的想法结合黑客知识化险为夷, ...

  6. 【Linux基础】查看某一端口是否开放(1025为例)

    1.使用lsof 命令来查看端口是否开放 lsof -i:1025 //如果有显示说明已经开放了,如果没有显示说明没有开放 lsof(list open files)是一个列出当前系统打开文件的工具. ...

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Clien

    https://blog.csdn.net/asahinokawa/article/details/84746422

  8. python之常用模块

    python 常用模块 之 (subprocess模块.logging模块.re模块) python 常用模块 之 (序列化模块.XML模块.configparse模块.hashlib模块) pyth ...

  9. Zabbix 3.4.7针对一些主机设置期间维护

    场景说明: 由于公司有些主机设置了定时开机关机,每次开机关机得时候都会发邮件告警,每次都需要值班人员提醒,为了处理这种无效告警,可以在zabbix中设置维护 zabbix中的维护---维护期间:用来设 ...

  10. Openssl x509命令

    一.简介 x509指令是一个功能很丰富的证书处理工具.可以用来显示证书的内容,转换其格式,给CSR签名等 二.语法 openssl x509 [-inform DER|PEM|NET] [-outfo ...