提问人:EthanSteel 提问时间:5/31/2023 最后编辑:EthanSteel 更新时间:8/4/2023 访问量:72
如何修复删除字符串 c++ 中所有实例的错误
How to fix error with removing all instances in a string c++
问:
我在删除 c++ 字符串中的所有“amp;”实例时遇到了问题,我创建了一个循环将“amp;”替换为“”,直到没有“amp;”实例。我遇到了一个未知错误,程序开始打印随机字符,我以前从未见过。下面有一张图片。我使用多个其他循环来删除同一程序中的内容,所以我不确定为什么现在会发生这种情况。
角色故障:https://screenrec.com/share/EcVLHoasvU
这是我使用的循环:
try {
while(DownloadLink.find("amp;") != string::npos){
DownloadLink.replace(DownloadLink.find("amp;"), 4, "");
}
} catch (const exception& Error) {
cerr << "Error: " << Error.what();
}
对于最小可重现的示例:
#include <iostream>
#include <string>
using namespace std;
int main() {
string DownloadLink;
DownloadLink = "https://rr2---sn-gjo-w43l.googlevideo.com/videoplayback?expire=1685464604&ei=vNF1ZPypCYLk8wS04YS4Bw&ip=193.135.13.240&id=o-AOroxIeyjf0SXpp4Jjav3mMxHNrQnAmWFHliIzDxKFK8&itag=22&source=youtube&requiressl=yes&mh=xJ&mm=31%2C29&mn=sn-gjo-w43l%2Csn-ab5sznly&ms=au%2Crdu&mv=m&mvi=2&pl=24&initcwndbps=248750&spc=qEK7B7YCjgMFmSN1lRYNJdgmcwOfjSE&vprv=1&svpuc=1&mime=video%2Fmp4&ratebypass=yes&dur=1535.256&lmt=1685416420579114&mt=1685442532&fvip=1&fexp=24007246%2C24362688%2C51000022&beids=24350017&c=ANDROID&txp=4318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRAIgOFevBFo84_aL0L8hSD1vwztRDGStTF6OaohO4gA8OIUCIE1wN5685dZ7FROQXO9W7BOv4thF8B3KxFE6iefy60xS&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAOO9mtQzsKDrCes2EPmTwOyB8QtGblPFo30I9VrOsSnMAiEAh91ImIfeaugrIfJ4Q0U30viktdo4sWHv0ywQV0kfjt8%3D&title=Ages+1+-+100+Fight+For+$500,000";
while(DownloadLink.find("amp;") != string::npos){
DownloadLink.replace(DownloadLink.find("amp;"), 4, "");
}
cout << DownloadLink;
return 0;
}
以前有没有人见过这样的事情或知道如何提供帮助? 谢谢
答:
1赞
Hudson
5/31/2023
#1
首先,我建议您查看此问题,以纠正您因此处列出的原因而使用的操作。
其次,您可以在 C++ 中替换。尝试用任何东西替换某些东西可能会通过擦除它来改善。
至于问题,您已经在评论中说过您重新安装了编译器,因此我不需要解决它。using namespace std;
replace()
erase()
我修改的代码:
#include <iostream>
#include <string>
int main() {
//You can enter the MrBeast challenge link during initialization
std::string DownloadLink = "https://rr2---sn-gjo-w43l.googlevideo.com/videoplayback?expire=1685464604&ei=vNF1ZPypCYLk8wS04YS4Bw&ip=193.135.13.240&id=o-AOroxIeyjf0SXpp4Jjav3mMxHNrQnAmWFHliIzDxKFK8&itag=22&source=youtube&requiressl=yes&mh=xJ&mm=31%2C29&mn=sn-gjo-w43l%2Csn-ab5sznly&ms=au%2Crdu&mv=m&mvi=2&pl=24&initcwndbps=248750&spc=qEK7B7YCjgMFmSN1lRYNJdgmcwOfjSE&vprv=1&svpuc=1&mime=video%2Fmp4&ratebypass=yes&dur=1535.256&lmt=1685416420579114&mt=1685442532&fvip=1&fexp=24007246%2C24362688%2C51000022&beids=24350017&c=ANDROID&txp=4318224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRAIgOFevBFo84_aL0L8hSD1vwztRDGStTF6OaohO4gA8OIUCIE1wN5685dZ7FROQXO9W7BOv4thF8B3KxFE6iefy60xS&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRgIhAOO9mtQzsKDrCes2EPmTwOyB8QtGblPFo30I9VrOsSnMAiEAh91ImIfeaugrIfJ4Q0U30viktdo4sWHv0ywQV0kfjt8%3D&title=Ages+1+-+100+Fight+For+$500,000";
while (true) {
size_t temp = DownloadLink.find("amp;");//since the link is pretty long, you only have to find it once
if (temp != std::string::npos) {
DownloadLink.erase(temp, 4);//you have the position saved in temp
}
else { break; }//if there is no more, break
}
std::cout << DownloadLink;
return 0;
}
评论
DownloadLink