C++ STL链表

标签 c++ stl

大家好,我的代码似乎有错误。

我的主要问题是我想更改任何出现的“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')) 执行以下操作:

  1. 如果 itr 的值为 p
  2. 获取 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/

相关文章:

c++ - 如何将指针映射公开为 const 指针映射?

c++ - C 和 C++ 之间的字符串字面量差异

c++ - valgrind 提示在 c 中做了一个非常简单的 strtok

c++ - std::remove_if 是否保证按顺序调用谓词?

c++ std 正则表达式为什么不匹配?

c++ - 如何实现相等范围 "iterator"

c++ - 函数重载 - T 和对 T 的引用

C++ 命名空间和常量变量

C++ 缩放图形内容

java - std::make_heap 等同于 Java?