大家好,我的代码似乎有错误。
我的主要问题是我想更改任何出现的“p”后跟“h”的部分。在我的测试中,它出于某种原因将其更改为“q”,当我希望它更改为“f”时。
为方便起见,有问题的方法是第二个 for 循环中的 void change()。
有人可以帮忙吗?
#include <iostream>
#include <list>
#include <ctype.h>
#include <fstream>
using namespace std;
void printList(const list<char> &myList);
void fillList(list<char> &myList);
void change(list <char> &myList);
void printList(const list<char> &myList)
{
list<char>::const_iterator itr;
for (itr = myList.begin(); itr != myList.end(); itr++ ) {
cout <<*itr;
}
cout << '\n' << endl;
}
void fillList(list<char> &myList)
{
ifstream file("test.txt");
string print;
while(file >> print){
for (int i = 0; i<print.length(); i++) {
myList.push_back(print[i]);
}
myList.push_back(' ');
}
}
void change(list <char> &myList)
{
list<char>::iterator itr;
//rules are as follows
for (itr = myList.begin(); itr != myList.end(); itr++ ) {
if (*itr == 'w' ){
*itr = 'v';
}
}
for (itr = myList.begin(); itr != myList.end(); itr++ ) {
if((*itr == 'p' && ++*itr == 'h')){// rule incomplete ask!
*itr = 'f';
}
}
}
int main ()
{
list<char> myList;
ifstream file("test.txt");
const string print;
fillList(myList);
printList(myList);
change(myList);
printList(myList);
return 0;
}
最佳答案
代码 if((*itr == 'p' &&++*itr == 'h'))
执行以下操作:
- 如果
itr
的值为p
- 获取
itr
的值并递增p + 1 = q
你需要做的是增加迭代器,而不是增加值
if(*itr == 'p') {
if(itr == myList.end()) break; // return or do something else
std::list<char>::iterator itr2 = itr;
if(*(++itr2) == 'h') {
// do what you need to
}
}
编辑:修复了随机迭代器的问题,并检查 p
是否是注释中指出的最后一个字符。
关于C++ STL链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36933272/