所以本质上我想创建一个退格程序来删除胡萝卜键和胡萝卜键前的字符(<
)。
例如,假设我有字符串:a<b<cd
这将输出:cd
胡萝卜实际上是退格。
我的问题是,当我在末尾有胡萝卜键时:终端完全无视它,并将光标移动到左边,而不是后退。
为什么它只处理结尾而不处理中间的字符?
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <string>
int main() {
std::string messystr = "a<a<a<aa<<";
int count = 0;
for (int i = 0; i < messystr.length(); i++) {
if (messystr[i] == '<') {
messystr[i] = 'b';
}
}
std::cout << messystr << std::endl;
}
输出应该是端子输出1个a
。
你知道字符,如'b', 'n',…都被认为是转义序列,这种非常特殊的类型('b')被命名为backspace,但它不会像您想象的那样工作。当我们在字符串中使用b时,我们并没有告诉std::cout对象删除该字符,我们只是告诉它将光标向后移动一个位置,如果我们在b之后写入一些内容,那么我们将覆盖b之前的字符。我来举个例子"s":只是" ",游标位于字符串的末尾"年代 b":它也是一个简单的" ",但游标在字符串的开始,而不是在s之后。"年代 ba"是"a", s被删除了,因为我们写了s,然后我们把光标移到s之前,然后'a'覆盖's',我们留下了"a"