"b"作为字符添加到字符串中

"" is added to the string as a character

本文关键字:字符串 添加 字符      更新时间:2023-10-16

在下面的代码中,"\b"从字符串中删除了一个字符,但它会增加它的大小,就好像字符可以在里面但不可见一样。

while (true) {
c = _getch();
if (c=='r') {break;} 
else if (c=='b') { cout<<"b"<<" "<<"b"; s+="b b"; }
else {cout<<"*"; s=s+c;}
}

例如,这个字符串 (abc"\b"d) 的大小,"c 被删除并替换为 d",仍然是 5。

我想知道如何在这种情况下有效地处理退格。

如果你逐个字符地读入一个字符串,你可以做这样的事情:

std::string mystr;
while (true) {
    c = _getch();
    if (c=='r') {break;} 
    if(c == 'b')
    {
        // This will remove last character from your string
        if(mystr.size () > 0)
        {
              cout<<"b"<<" "<<"b";
              mystr.resize (mystr.size () - 1); 
              // or mystr.pop_back() in C++11
        }
    }
    else
    {
        cout<<"*";
        mystr += c;
    }    
}

当您获得退格键时,您需要"物理"地从字符串中删除最后一个字符:

while (true) {
    c = _getch();
    if (c=='r') {
        break;
    }
    if (c=='b') {
        cout<<"b"<<" "<<"b";
        if (s.length() > 0) {
            s = s.substring(0, s.length()-1);
        }
    }
    else {cout<<"*"; s=s+c;}
}

作为优化,我们可以修剪s而不是重新分配,正如 Jason 所建议的那样:

    s.resize(s.size() -1);

(当我们使用它时,我们可以将s.length()(或s.size())保存到局部变量中以避免额外的调用 - 假设编译器知道 std::string,还没有这样做)。

for(char c=_getch(); c!='r'; c=_getch())
  if(c=='b')
    mystr.pop_back();
  else
    mystr.push_back(c);