以 C++ 为单位从字符串向量中删除字符

Erase a character from a string vector in C++

本文关键字:删除 字符 向量 字符串 C++ 为单位      更新时间:2023-10-16

我正在尝试为一个非常简单的文本编辑器实现撤消功能。目前,我有一个 std::vector,它存储用户为特定行输入的字符串,该行充当用户所在的当前行号。

我能够使用以下代码将字符插入当前字符串:

void Editor::insertCharacter(char& c)
{
    lines[row].insert(column, 1, c);
    column++;
}

在这种情况下,我将字符插入当前行的特定列中。此列充当光标应该位于的位置的索引,因此通过执行column++,光标在插入字符后向右移动一个位置。此方法工作正常。我现在遇到的问题是当我尝试撤消插入字符时。

基本上,我必须擦除column当前所在的字符,然后递减column以实现"撤消">

我尝试做的第一件事是像这样删除字符:

lines[row].erase(column)

以下是我运行此程序时发生的情况的示例(其中 | 是光标位置(:

hello|     (user enters hello)
h|ello     (user moves cursor back to column 2)
hTEST|ello (user enters the word TEST)
(user hits ctrl + z which triggers undo)
hTES|      (final output)

因此,我在线查看并看到我可以使用迭代器+偏移量来删除变量的索引。所以我更新了撤消功能,如下所示:

lines[row].erase(lines.begin() + column)

但这无法编译,并且我收到此错误:

error: no matching member function for call to
      'erase'
    lines[row].erase(lines.begin() + column);
    ~~~~~~~~~~~~~~~^~~~~

那么我应该如何擦除字符串的这一部分而不擦除字符串中剩余的所有内容呢?

不应该是:lines[row].erase(lines[row].begin() + column)