50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 一本通——1406:单词替换 详解

一本通——1406:单词替换 详解

时间:2022-05-11 22:28:01

相关推荐

一本通——1406:单词替换  详解

原题::8088/problem_show.php?pid=1406

题意解析:题目整体是比较好理解的,将输入的文章中的特定单词进行替换即可

解题思路:

这个题目我有两种解题思路:

思路一:利用字符数组来进行,完成输入后,将待替换的单词a与原文s进行逐个单词的比较,如果单词相同,那么输出替换单词b,具体代码如下:

#include<bits/stdc++.h>using namespace std;int main(){string s;string a,b;//解题思路:在字符串s中先 查找出单词a,如果是单词a,那么输出b,否则输出当前单词getline(cin,s);getline(cin,a);getline(cin,b);int len1=s.size();//求取文章的长度int len2=a.size();//求取带替换单词的长度int j;for(int i=0;i<len1;i++)//遍历字符串s{for(j=0;j<len2;j++)//遍历字符串a{if(s[i+j]!=a[j])break;//若字符不匹配退出循环,再从第i+1个开始判定if(i>0&&s[i-1]!=' ')break;//若第i个字符不是文章首且前一个字符不是空格,则不是独立单词,退出循环}//如果运行到最后字符串a遍历完成且字符串s中该单词对应位置后一位是空格,或者已经运行到最后一个单词了,那么说明文中单词与代替换单词完全对应if(j==len2&&(s[i+j]==' '||j+i==len1)){cout<<b;//于是输出替换单词b,并将遍历字符串s的i移到待替换单词之后i=i+j;cout<<" ";}else //如果不满如上述条件,那么即将当前字符输出即可{cout<<s[i];}} return 0;}

思路二:利用字符串的性质直接进行比较,在第一个字符串的输入过程中,就利用文章特性——每个单词之间以空格为间隔,将每个单词存入字符串数组中,将带替换单词a以及替换单词b输入后直接将a与字符串数组中的单词直接进行比较,如果相等,输出b,如果不相等,输出原单词以及空格即可,代码如下:

本思路参考了[小韦同学]的文章,声明如下版权声明:本文为CSDN博主「小韦同学」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:/qq_31790997/article/details/86713902#include <string> #include <iostream>using namespace std;const int N = 110;string s[N];int main() {// 输入的字符串,要被替换的字符串,用来替换的字符串 string str, before, after;int len = 0; // 字符数组的下标 getline(cin, str);for (int i = 0; i < str.size(); i++) {if (str[i] != ' ') { // 若当前字符不是空格时 s[len] += str[i]; // 将该字符存到字符数组中 } else { // 当遇到空格时,字符数组下标加一 len++; }}cin >> before >> after;for (int i = 0; i < len; i++) { // 枚举字符数组 if (s[i] == before) { // 若当前字符串为被替换字符串 s[i] = after; // 将该字符串的值改为替换的字符串 }}for (int i = 0; i <= len; i++) {cout << s[i] << " ";}return 0;}

根据小韦同学的思路,改进代码如下

#include<bits/stdc++.h>using namespace std;int main(){string s[201],a,b;int i=0;//字符串数组位置char d;do{i++;cin>>s[i];输入单词d=getchar();//取得单词后的空格}while(d==' ');//如果单词后不是空格(是结束符),即跳出循环cin>>a>>b;for(int j=1;j<=i;j++){if(s[j]==a) cout<<b<<" ";//直接将字符串a[i]与a进行比较,如果相等,输出belse cout<<s[j]<<" ";//如果不相等,输出当前单词}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。