我必须编写一个程序,在那里我必须删除文本字符串中的特定字母。
例如,如果用户键入类似"Hepello Ipe hapeve ape prpeobpelepem"
的文本,则代码必须自动删除'pe'
字母,以便文本变为正常的"Hello I have a problem"
。
我试着用list
函数来编程,但是我的老师说我必须使用指针和动态结构,这是我很烂的。
有人能帮帮我吗?
以下是我目前所拥有的代码。我的第二个代码仍然相当空:
#include <iostream>
#include <string>
#include <list>
using namespace std;
list<string> createCodeList()
{
list<string> codeList;
string input;
cout << "Enter your coded text: " << endl;
getline(cin, input);
for (int i = 0; i < input.length(); i += 3)
{
string code = input.substr(i, 2);
codeList.push_back(code);
}
return codeList;
}
void removeCodeWords(list<string>& codeList)
{
for (auto it = codeList.begin(); it != codeList.end(); )
{
if (*it == "pe")
{
it = codeList.erase(it);
}
else
{
++it;
}
}
}
void printCodeList(const list<string>& codeList)
{
for (const string& code : codeList)
{
cout << code;
}
cout << endl;
}
int main()
{
list<string> codeList = createCodeList();
removeCodeWords(codeList);
printCodeList(codeList);
return 0;
}
#include <iostream>
#include <string>
using namespace std;
struct Codedtext
{
string text;
};
typedef Codedtext* point;
point Createlist()
{
point list = NULL;
char input;
cout << "Enter your coded text: " << endl;
cin >> input;
}
int main()
{
return 0;
}
1条答案
按热度按时间xkrw2x1b1#
您的
std::list
代码不起作用,因为您的createCodeList()
函数没有正确地分解用户的输入。它从每组3个字符中提取2个字符,而不管"pe"
子字符串实际位于何处(提示:它们不是以3个字符的均匀间隔定位的)。现在,您正在像这样分解输入:
Hep|ell|o I|pe |hap|eve| ap|e p|rpe|obp|ele|pem
Hep
-〉He
ell
-〉el
o I
-〉o
pe
-〉pe
(已删除)hap
-〉ha
eve
-〉ev
x1米16英寸1x-〉x1米17英寸1x
x1米18英寸1x-〉x1米19英寸1x
x1个月20个月1x-〉x1个月21个月1x
obp
-〉ob
x1米24英寸1x-〉x1米25英寸1x
pem
-〉pe
(已删除)因此,您的输出结果为:
海芋
而正确的拆分应该如下所示(注意分组长度不同):
He|pe|llo I|pe| ha|pe|ve a|pe| pr|pe|ob|pe|le|pe|m
He
pe
(已移除)llo I
pe
(已删除)ha
pe
(已删除)ve a
pe
(已删除)pr
pe
(已删除)x1米39英寸
pe
(已删除)le
pe
(已删除)m
因此,输出将是:
你好我有个问题
看到区别了吗?
话虽如此,试试这个:
现在,代码的其余部分将按预期工作。
Online Demo
也就是说,既然你的老师不想让你使用
std::list
,你可以简单地自己实现链表,如下所示:Online Demo