C++编程,查找字符串子串并替换。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程,查找字符串子串并替换。相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <string>
using namespace std;

int main()
string a;/////指定串,可根据要求替换
string b;////要查找的串,可根据要求替换
string c;
while(cin>>a>>b>>c)

int pos;
pos = a.find(b);////查找指定的串
while (pos != -1)

a.replace(pos,b.length(),c);////用新的串替换掉指定的串
pos = a.find(b);//////继续查找指定的串,直到所有的都找到为止

cout<<a<<endl;

return 0;


这个代码超时了,请问怎么控制?
程序运行超时

#include <iostream>

#include <string>

using namespace std;

 

int main()

 string a;/////指定串,可根据要求替换

 string b;////要查找的串,可根据要求替换

 string c;

 cin>>a>>b>>c;

 int pos;

 pos = a.find(b);////查找指定的串

 while (pos != -1)

 

  a.replace(pos,b.length(),c);////用新的串替换掉指定的串

  pos = a.find(b);//////继续查找指定的串,直到所有的都找到为止

 

 cout<<a<<endl;

 return 0;

 

 

测试将test换成TEST成功!

如图所示!

追问

我这个题目要处理到文件尾,就是多组测试,while循环必须要的。。

参考技术A 1.一般不要使用cin作为循环退出的判断依据,除非你非常明白它,并且确认必须要使用它。
2.一般不要使用-1作为搜索不到字符串的判断依据,一般使用std::string::npos
3.一般不要使用int来接收搜索位置,一般使用size_type
4.尽量不要直接using namespace,那样的话,命名空间存在的意义也就不大了。
参考技术B 数据太大会超时的 参考技术C while(cin>>a>>b>>c) 这句,你是要一直循环输入啊? 没有退出的?追问

是的

追答

退出肯定是要的吧,你说读文件也是要判断是否到了文件的末尾,否则你这个程序不是要一直跑?
我刚刚试了一下你的程序没有什么运行超时啊。 你是不是其他程序调用这个程序》?

参考技术D 超时啦?什么意思?
运行超时什么现象呢?显示什么呢?是不能输入了嘛?还是崩溃了?追问

是你问我还是我问你呢。。=,=。程序有运行时间那,不然提交就会超时,所以要优化一下!

追答

中午休息后,参考并改进,vs2010通过测试

看看是不是您想要的效果:

// tesWeb.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])

  string a;/////指定串,可根据要求替换
  string b;////要查找的串,可根据要求替换
  string c;
  int pos;
    while ( cin >> a>>b>>c)
 pos = a.find(b);

  while(pos != -1)
 
   a.replace(pos++,b.length(),c);////用新的串替换掉指定的串
   pos =  a.find(b);
         
 
 cout<< a.c_str() <<endl;
 
 
 return 0;

谢谢

编程100%22-08 字符串子序列

题目描述

时间限制: 3000MS
内存限制: 589824KB

题目描述:

输入n个字符串,S1,S2,S3,...,Sn。小明想在其中选出K个字符串,把它们按照原始的顺序排好。严格地,小明选出了K个下标1≤i1<i2<i3<,...,<ik≤n,从而得到了新的K个字符串的序列Si1,Si2,Si3,...,Sik。

定义两个字符串S,T的最长公共前缀是S和T最长的一段相同的前缀。如字符串“abba”和“abab”的最长公共前缀是”ab”;字符串“ababa”和“ababb”的最长公共前缀是”abab”;字符串”aba”和“bab”的最长公共前缀是空串。

定义一个字符串序列的价值为所有相邻串公共前缀长度之和,小明想选出价值最高的序列。

 

输入描述

第一行输入两个数n,k。(2≤n≤50,2≤k≤n)

接下来有n行,每行一个字符串。每个字符串长度不超过20,字符串中只有小写字母。

输出描述

输出一个数,最大价值。

示例

样例输入

5 3
abbc
bcc
abba
ab
abbb

样例输出

6

思路

1、 从小到大排序;

2、二分法查找插入;

实现:

……

通过率100%

---------------------------------------------------------------------------------------- 

每周一道题,作为新时代的码农,无论是什么时候都不应该放弃编程

以上是关于C++编程,查找字符串子串并替换。的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

字符串子串的查找

如何使用特定符号 C++ 查找和替换字符串中的所有字符

C语言文件中字符串的查找与替换

数组篇在python中如何查找最长字符串子串

2022华为机试真题 C++ 实现 字符串子序列II