题目1111:单词替换

题目描述:

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

输入:
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
 
s, a, b 最前面和最后面都没有空格.
输出:
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。
样例输入:
You want someone to help you
You
I
样例输出:
I want someone to help you

#include <iostream>
#include <string>
using namespace std; int main()
{
string s, a, b;
while(getline(cin, s))
{
getline(cin, a);
getline(cin, b); for(int i = ; i < s.length(); i++)
{
if(s.length() - i >= a.length())
{
if(s.substr(i, a.length()) == a
&& (i == || s[i - ] == ' ')
&& (i == s.length() - a.length() || s[i + a.length()] == ' '))
{
s.replace(i, a.length(), b);
}
}
else
break;
}
cout << s << endl;
}
return ;
}
/**************************************************************
Problem: 1111
User: 文剑木然
Language: C++
Result: Accepted
Time:0 ms
Memory:1520 kb
****************************************************************/

【总结】

对于C++中的字符串操作还比较陌生,代码写得比较繁琐。

主要注意要点:

1、cin >> s 会将空格作为输入结束,所以要用getline(cin, s)。

getline还有一些细节上的问题需要注意。

2、要注意判断单词边界

之前的错误答案:

#include <iostream>
#include <string>
using namespace std; int main()
{
string s, a, b;
while(getline(cin, s))
{
getline(cin, a);
getline(cin, b);
if(s.length() >= a.length())
{
for(int i = ; i <= s.length() - a.length(); i++)
{
if(s.substr(i, a.length()) == a
&& (i == || ' ' == s[i - ])
&& (i == s.length() - a.length() || ' ' == s[i + a.length()]))
{
s.replace(i, a.length(), b);
}
}
}
cout << s << endl;
}
return ;
}
/**************************************************************
Problem: 1111
User: 文剑木然
Language: C++
Result: Runtime Error
****************************************************************/

【错误分析】

当输入为

you
you
i

时,会发生错误。

terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr: __pos (which is ) > this->size() (which is )

因为,执行替换后,循环终止条件

i <= s.length() - a.length()

恒满足,也就是i的值将不断增加,然后导致越界。

【九度OJ】题目1111:单词替换的更多相关文章

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

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

  2. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  3. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  5. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  6. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  7. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  8. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  9. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  10. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. gridview填充剩下的空间

    设置不要在控间中滑动: public class DeliverGridView extends GridView { public DeliverGridView(Context context, ...

  2. 使用oh-my-zsh后导致的卡顿问题

    现象是每次cd和ll时都会被卡住很长时间根本受不了,最后在官方github查明原因是使用的主题会自动获取git信息,可以使用以下命令禁止zsh自动获取git信息,解决卡顿问题 git config - ...

  3. Android Studio新建一个HelloWorld 程序(App)

    Android Studio新建一个HelloWorld程序(App) 新建 或者直接启动程序(注:如果已有程序,此方法会直接打开最近一次关闭从程序) 更改App名 选择App运行平台 选择模板 更改 ...

  4. 汉化PLSQL怎么改变字体的大小及关键字颜色

    打开工具---首选项-----编辑器---语法高亮进行设置自己喜欢的颜色---应用--确定 英文版PLSQL:tools----preferences---userinterface项目下的edite ...

  5. Html+Ajax+Springmvc+Mybatis,不用JSP

    有一个原因如下很合本人观点: http://bbs.csdn.net/topics/390939813 前端使用HTML+Ajax,后端使用Java Servlet,这样完全可以做到前后端分离,前端那 ...

  6. C语言解析Ini格式文件

    引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...

  7. IOS TableView 去除点击后产生的灰色背景

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPa ...

  8. Spring MVC @Transactional注解方式事务失效的解决办法

    在springMVC类上绑定@Transactional的注解,但是访问数据库时,总是报 can't localtion to current JTA Transactional. 后来发现sprin ...

  9. poj1087 A Plug for UNIX(网络流最大流)

    http://poj.org/problem?id=1087 好久没遇见过这么坑的题了这个题真是挫的够可以的.题目大意:你作为某高管去住宿了,然后宾馆里有几种插座,分别有其对应型号,你携带了几种用电器 ...

  10. Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?

    本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法. 1. 2.实现代码: /datasave/src/com/amos/datasave/savePasswordSer ...