题目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的值将不断增加,然后导致越界。

最新文章

  1. Hadoop学习笔记—8.Combiner与自定义Combiner
  2. 如何利用【DataTable】结合自己本地数据库,使用表格
  3. project euler 开坑
  4. jafka消息结构
  5. (转)实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC
  6. 函数flst_get_last
  7. SIM卡读卡器的研究与设计
  8. Android应用----如何让应用全屏
  9. FULL JOIN 与 CROSS JOIN
  10. Ionic.Zip.dll文件压缩和解压
  11. C++函数重载和函数模板(04)
  12. python语言 第一个程序
  13. GitLab11.3.9 使用 Crowd3.3.2 的帐号实现 SSO 单点登录,以及GitLab配置腾讯企业邮箱
  14. python爬虫学习笔记(一)——环境配置(windows系统)
  15. supervisor学习
  16. 【HDU - 4341】Gold miner(分组背包)
  17. python调用linux的命令
  18. ORA-20011 问题处理
  19. IIS 8的第一次请求不变慢如何配置
  20. OD之去除nag弹窗(四)

热门文章

  1. C#删除文件
  2. centos7配置wordpress
  3. IE6 7下常见CSS兼容性处理
  4. Android遍历获取Office格式(Word,Excel,PPT,PDF)的文件并打开
  5. uiautomator跑安卓端UI testing
  6. 怎样从altera下载软件与器件库
  7. 自定义citationstyles(cls)文献引用模板
  8. 使用NPOI2.1.3.1版本导出word附带表格和图片
  9. php学习笔记-基础篇
  10. ajax的表单提交,与传送数据