题目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. 2016 China-Final-F题 ——(SA+二分)

    其实是一个很经典的字符串问题,但是我们比赛的时候没出. 先看一下UVA11107这题,题意是,找出最长的一个字符串,在至少一半的字符串中出现过.只要把所有的字符串用不同的分隔符分开,然后SA一下,最后 ...

  2. 个人关于React的一些理解

    ##React背景 React是当前前端最火的框架,它的理念思想及构建方法比AngularJS更适合做webApp. 它是由facebook团队研发并开源到社区,所以它有很强大的技术背景,而且它的架构 ...

  3. eclipse导入PIL报错

    有些模块,比如PIL,已经装入过,但是在pydev中无法自动提示,甚至有报 unresolved import的问题,虽然不会引起运行时问题,但是无法实现自动提示,还是一件很麻烦的事情. 下面有个解决 ...

  4. EventBus 优化广播的传播

    需要在onEventMainThread方法上,添加@Subscribe,程序才能执行. http://blog.csdn.net/harvic880925/article/details/40787 ...

  5. PTA Strongly Connected Components

    Write a program to find the strongly connected components in a digraph. Format of functions: void St ...

  6. [原创]迈出NIOS的第一步,HelloNIOS

    Altera官方推出NIOS已经很久了,个人感觉C+V代码配合会是后面FPGA使用的一个主流,由C来完成一些对时序要求不高,对功能要求偏高的部分,比如运动控制等:由V来配合时序完成高时序要求的需求以及 ...

  7. ios -网络加载json和本地加载json

    1网络加载json的时候,要在模型的实现文件里写: - (void)setValue:(id)value forKey:(NSString *)key { } 2本地加载json的时候,要在模型的实现 ...

  8. java多线程详解(8)-volatile,Atomic比较

    在变成过程中我们需要保证变量的线程安全,在java中除了使用锁机制或者Threadlocal等保证线程安全,还提供了 java.util.concurrent.atomic.Atomic*(如Atom ...

  9. How to configure a static IP address on CentOS 7(CentOS7静态IP地址设置)

    Question: On CentOS 7, I want to switch from DHCP to static IP address configuration with one of my ...

  10. 模拟退火算法求解旅行商问题(附c和matlab源代码)

    前几天在做孔群加工问题,各种假设到最后就是求解旅行商问题了,因为原本就有matlab代码模板所以当时就改了城市坐标直接用了,发现运行速度惨不忍睹,最后用上了两个队友的电脑一起跑.这次模拟结束后在想用c ...