c++ 退格键\b对字符串结尾无效

8aqjt8rx  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(248)

所以本质上我想创建一个退格键程序,删除胡萝卜键和胡萝卜键前面的字符(<)。
例如,假设我有一个字符串: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

vfh0ocws

vfh0ocws1#

如你所知,字符'\b','\n',...被认为是转义序列,而这种非常特殊的类型('\ b')被命名为backspace,但它的工作方式并不像你所想的那样。当我们在字符串中使用\b时,我们并不是告诉std::cout对象删除字符,我们只是告诉它将光标向后移动一个位置,如果我们在\b后面写一些东西,那么我们将覆盖\b前面的字符。让我来举一个例子“s”:仅为“s”,光标位于字符串“s\B”的末尾:它也只是一个“s,”但光标位于字符串的开头,而不是s之后。“s\ba”:是“a,"s被删除了,因为我们写了s,然后我们把光标移到s之前,然后”a“覆盖了”s,“剩下的是“a”。

相关问题