如何解决流程已终止完成时间超过12000毫秒
创建一个函数,该函数使用一个句子并将每个“ i”变成“ wi”,将“ e”变成“ we”,最后添加“ owo”。
我正在为上述问题创建函数,但收到错误:
进程已终止。完成时间超过12000毫秒
有人可以帮助我解决此问题吗?
#include<string>
std::string owofied(std::string sentence) {
int pos=0;
for(int i =0 ; i<sentence.size(); i++)
{
if(sentence[i]=='i')
sentence.replace(i,1,"wi");
else if(sentence[i]=='e')
sentence.replace(i,"we");
pos=i;
}
sentence.insert(pos,"owo");
return sentence;
}
解决方法
您的代码将“ e”变成“我们”。但是随后它将“我们”中的“ e”变成“我们”,从而创建了另一个也被替换的“我们”。
一个简单的解决方法是在替换后增加i
的时间。
当您插入wi
或we
时,您不会在替换之后增加i
,因此下一次迭代将找到新的i
/ e
并不断地替换它,依此类推等等,直到代码超时或内存不足。
尝试以下方法:
#include <string>
std::string owofied(std::string sentence)
{
std::string::size_type i = 0;
while (i < sentence.size())
{
if (sentence[i] == 'i')
{
sentence.replace(i,1,"wi",2);
i += 2;
}
else if (sentence[i] == 'e')
{
sentence.replace(i,"we",2);
i += 2;
}
else {
++i;
}
}
return sentence + "owo";
}
然后可以使用std::string::find_first_of()
查找要替换的字符,从而将其简化一些,例如:
#include <string>
std::string owofied(std::string sentence)
{
std::string::size_type i = 0;
char replacement[2] = { 'w','?' };
while ((i = sentence.find_first_of("ie",i,2)) != std::string::npos)
{
replacement[1] = sentence[i];
sentence.replace(i,replacement,2);
i += 2;
}
return sentence + "owo";
}
或者,由于“替换”实际上只是w
的“插入”:
#include <string>
std::string owofied(std::string sentence)
{
std::string::size_type i = 0;
while ((i = sentence.find_first_of("ie",2)) != std::string::npos)
{
sentence.insert(i,'w'); // or: sentence.insert(i,"w",1);
i += 2;
}
return sentence + "owo";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。